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は公開されません

※ コメントは承認されると下記に表示されます

コメント一覧

最近の投稿

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

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

Netlify Formsを使ってブログサイトにコメント機能を追加する方法を調べたので紹介 Netlify FormsはNetlifyに標準機能として用意されているフォーム機能 サーバレスなので別途コメント用にサーバを用意する必要がなくHTMLを埋め込むだけで準備できる

TypeScriptの入門の入門チートシート 型の種類や使い方についてまとめていくだけでなく、 TypeScriptについてや必要性などについてもまとめることでこのページでTypeScriptをざっくり理解できる程度の内容を目指す

NetlifyのFormsやSplit Testing、Functionsについて使い方をまとめる FormsはNetlifyに標準機能として用意されているフォーム機能でコメント保存用にサーバを用意する必要がない Split TestingはGitHubのブランチをベースにしたA/Bテストを行うための機能のことで、FunctionsはNetlifyでAWS Lambdaを使うことができる

カテゴリ一覧

タグ一覧