PerlのTest::More入門の入門

Published: 2016年3月21日 by tomsato

概要

PerlのTest::Moreについて簡単にまとめます
入門の入門なので短く簡潔に
perl3

PerlのTest::Moreについて

Perlでテストするためのデファクトスタンダードとも言えるモジュールです

ちなみに

  • Test::Simple(Test::Moreよりも機能を絞った簡素なモジュール)
  • Test::Most(Test::Moreでは機能が物足りないと思った人向けのモジュール)

もありますがこだわりがないのならばとりあえずTest::Moreで良いかと思います

使い方

Test::Moreを使ったテスト例
一般的にテストファイルはtディレクトリに入れてファイル名は*.tらしい

$ cat t/MoreTest1.t
#!/usr/bin/perl
use strict;
use warnings;
use Test::More;

my $flag = 1;
ok($flag); # 真ならok

# テストはここまでというおまじない
done_testing;
# done_testingにたどり着く前にテストが終わってしまった場合は
# 「宣言部がない」というエラーを出すことも可能

テストを行う

$ perl t/MoreTest1.t
ok 1
1..1

proveを使ってテストを行うのが主流みたい

$ prove -v t/MoreTest1.t
t/MoreTest1.t ..
ok 1
1..1
ok
All tests successful.
Files=1, Tests=1,  1 wallclock secs ( 0.02 usr  0.01 sys +  0.01 cusr  0.00 csys =  0.04 CPU)
Result: PASS

proveとは

  • テストをまとめて実行するためのツール
  • Test::Harnessをインストールすることでインストール
  • prove t/*.tと書くと複数のテストファイルをまとめて実行できる
  • TAP::Formatter::JUnit、TAP::Harness::JUnitやcloverを使うとJenkinsと連携してでコードカバレッジを表示できる

proveのオプションについて参考:prove についてのおさらい

もう少し使ってみる①

$ cat t/MoreTest2.t
#!/usr/bin/perl
use strict;
use warnings;
use Test::More;

my @array = (1,3,5);

# TODOブロックの中でこけても許される
# こけてもexitコードが0になる
TODO: {
    # TODOを使っている理由を書く
    local $TODO = "URI::Geller not finished";

    fail('TODO fail test'); # ここを通るとNGになる
}

# このブロックはとばす
SKIP: {
    eval { require HTML::Lint };
    # スキップする理由を書く
    skip "HTML::Lint not installed", 2 if $@;
}

# テストのブロックを明示する、descriptionが必須なのでわかりやすい
subtest 'ok test' => sub {
    my $flag = 1;
    ok($flag); # 真ならok
};

done_testing; # テストここまで

実行
perl1

もう少し使ってみる②

テスト対象のモジュールを用意

$ cat Hoge.pm
#!/usr/bin/perl
package Hoge;
use strict;
use warnings;
use Test::More;

sub new {
    my ($class, %args) = @_;
    bless \%args, $class;
}
sub sum {
    my ($self, @array) = @_;
    my $total = 0;

    foreach my $num (@array) {
        $total += $num;
    }
    return $total;
}
1;

テストスクリプト

$ cat t/HogeTest.t
#!/usr/bin/perl
use strict;
use warnings;
use Test::More; # Tese::Moreを読み込む
use_ok('Hoge'); # モジュールが読み込めるか

subtest 'hoge sum test' => sub {
    my $obj = Hoge->new;
    isa_ok($obj, 'Hoge');

    my $got = $obj->sum(3, 2, 3);
    is($got, 8);
};

done_testing;

実行

$ prove -v t/HogeTest.t
t/HogeTest.t ..
ok 1 - use Hoge;
    # Subtest: hoge sum test
    ok 1 - An object of class 'Hoge' isa 'Hoge'
    ok 2
    1..2
ok 2 - hoge sum test
1..2
ok
All tests successful.
Files=1, Tests=2,  0 wallclock secs ( 0.02 usr  0.01 sys +  0.01 cusr  0.00 csys =  0.04 CPU)
Result: PASS

参考

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧