perlではt/以下にテストファイルを置いておくのですが、肥大化してくるとテストがどこにあるのか分からなくなります。
対策として、1クラス1テストファイルにしてライブラリと同じディレクトリ階層を作る、があります。
しかし面倒くさいですし、そのファイルにあることは分かっても、どのテストが自分の確認したいテストなのかが、すぐには分からないことがあります。
既存カバレッジモジュールで、あるメソッドのテストを実行したときに中で異なるメソッドを呼び出してるだけで、そのメソッドもカバレッジに追加されて、むーん、ってときに作ってました。
対策として、1クラス1テストファイルにしてライブラリと同じディレクトリ階層を作る、があります。
しかし面倒くさいですし、そのファイルにあることは分かっても、どのテストが自分の確認したいテストなのかが、すぐには分からないことがあります。
命名規則を決めてgrep
- メソッド名の完全な名前をsubtestに書く
- メソッド内の各種条件はsubtestをネスト
メリット
- 一意に検索できる
- 俺々カバレッジが作りやすい
テスト対象コード
package Hoge;
sub new {
....
}
sub search {
....
}
テストコード
use Test::More;
subtest 'Hoge::search' => sub {
subtest 'limit' => sub {
my $hoge_obj = Hoge->new;
my @res = $hoge_obj->search( limit => 20 );
is(scalar @res, 20);
};
subtest '....' => sub {
....
};
};
done_testing;
おれおれカバレッジ
この命名規則だとsubtestをオーバーライドすることでテストカバレッジが簡単に取れます。既存カバレッジモジュールで、あるメソッドのテストを実行したときに中で異なるメソッドを呼び出してるだけで、そのメソッドもカバレッジに追加されて、むーん、ってときに作ってました。
0 件のコメント:
コメントを投稿