読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

Testをはじめてみた3

Testをはじめてみた1 - Perl日記
Testをはじめてみた2 - Perl日記」の続き。

  • 「なったふり」オブジェクト(モック)を使ってTest
    • Test::MockObject
    • mock...模造品、まがい物。
      • システムの一部のテストなんだけど、システムの他の部分を通るところもあって、でもそこはちゃんと動いてるって分かってる時。
      • ちょっとのテストのためにDB接続なんてコストが高いんだよお、という時。
    • →モックオブジェクトでテスト
      • set_true($method_name)
      • set_false($method_name)
      • mock($method_name => $code_ref)
#!/usr/bin/perl
# TestMore6.pl
use Test::More 'no_plan';
use Test::MockObject;

#my $color = Class::MyColor->new;
my $color = Test::MockObject->new;

my @true_methods = qw/set_color get_color mix/;
for my $method_name (@true_methods) {
  $color->set_true($method_name);
}
$color->set_false('clear_color');

ok($color->set_color('red'), 'Set red Color');
ok($color->get_color,        'Get Color');
ok($color->mix('red', 'blue'), 'Mix Color Red and Blue');
ok(!$color->clear_color, 'Clear Color');

$color->mock(
  ratio => sub {
    my %ratio = ( gray => { black => 0.5 }, aqua => { blue => 0.45 } );
    my ($self, $base) = @_;
    return $ratio{$base} if $ratio{$base};
    return;
  },
);

cmp_ok($color->ratio('gray')->{'black'}, '==', 0.5, 'Gray is Black * 0.5');
cmp_ok($color->ratio('aqua')->{'blue'},  '==', 0.45, 'Aqua is Blue * 0.45');
% perl TestMore6.pl 
ok 1 - Set red Color
ok 2 - Get Color
ok 3 - Mix Color Red and Blue
ok 4 - Clear Color
ok 5 - Gray is Black * 0.5
ok 6 - Aqua is Blue * 0.45
1..6
  • PODのテスト
    • Test::Pod
      • 強制の意味は弱い
      • →eval "use Test::Pod 1.00";
    • Test::Pod::Coverage
      • 全サブルーチン、メソッドについての説明があるかチェック