概要
PerlのTest::Moreについて簡単にまとめます
入門の入門なので短く簡潔に
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; # テストここまで
実行
もう少し使ってみる②
テスト対象のモジュールを用意
$ 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
コメントを書く
コメント一覧