豊かなロシア語では、残念ながらいくつかの単語がありません。そのため、「Writing / Writing unit tests」という単語でメモを開始する代わりに、フレーズを長くする必要があります。単体テストを作成するプロセスでは、古いテストを調べて1つまたは別のオブジェクトを置き換える方法をすばやく覚える必要があることが多いので、小さなチートシートをスケッチするときだと判断しました。
すぐにあまり蹴らないようにお願いします。これはチートシートであり、ガイドではないため、すべてが非常に簡単です。
乱数ジェネレーターの置換
BEGIN { *CORE::GLOBAL::rand = sub {66}; }
時間変更
use Test::MockTime qw( :all ); set_fixed_time( 1305636470 );
CPAN:
テスト:: MockTimeなりすましredis
use Test::Mock::Redis; my $redis = Test::Mock::Redis->new( server => 'whatever' );
CPAN:
テスト::モック:: RedisDBMSのなりすまし
挿入:
use DBI; my $dbh = DBI->connect( 'dbi:Mock:', '', '' ); my $history = $dbh->{mock_all_history}; my $st = $history->[0];
選択するには、偽の結果をスリップする必要があります。
$dbh->{mock_add_resultset} = { sql => 'SELECT emergency_dequeue_start()', results => [ [ 'emergency_dequeue_start' ], [ '11' ], ], };
データベースで直接動作するモジュールのみをテストする必要がありますが、他の場合では、これらのテストはモジュールの実装に強く結び付けられており、APIのみにバインドする方がよいため、ORMモジュールまたはそれを置換するモジュールを置き換える方が適切です。
CPAN:
DBD ::モックHTTPスクリプトへのアクセスの置き換え(LWP :: UserAgent)
use Test::Mock::LWP; $Mock_ua->mock( agent => sub {'My Agent 007'} ); $Mock_request->mock( content_type => sub {'application/x-www-form-urlencoded'} ); $Mock_response->mock( code => sub {200} ); $Mock_response->mock( content => sub {$response} ); $Mock_response->mock( is_error => sub {0} ); $Mock_response->mock( status_line => sub {'status line'} );
$応答変数の値を設定することにより、「スクリプト」の応答を制御します。 content()を使用し、リクエストが正しく形成されているかどうかを確認したい場合は、次を実行します。
$Mock_ua->mock( agent => sub { 'SMSOnline plc' } ); $Mock_request->mock( content_type => sub { 'application/x-www-form-urlencoded' } ); $Mock_request->mock( content => sub { ( my $self, $got_request ) = @_; $got_request; } ); $Mock_response->mock( code => sub { 200 } ); $Mock_response->mock( content => sub { $response } ); $Mock_response->mock( is_error => sub { 0 } ); $Mock_response->mock( status_line => sub { 'status line' } );
$ got_requestで送信したい内容を正確に確認できます
CPAN:
テスト::モック:: LWP任意のオブジェクトの置換
my $mock = Test::MockObject->new(); Test::MockObject->fake_new( 'My::Module' ); my @txt_stat = (0, 0); $mock->mock( 'read_txt', sub { return @txt_stat; } ); $mock->mock( 'write_txt', sub { 1; } );
@txt_statでは、さまざまなテスト用に何かを変更できます
CPAN:
テスト:: MockObjectLog4perlのなりすまし
debug()メソッドの置換:
my $logger = Test::MockObject->new(); Test::MockObject->fake_new( 'Log::Log4perl::init' ); $logger->mock( 'debug', sub { shift; diag shift; } );
テストが正常に合格した場合、診断シフト。 出力が乱雑にならないように削除することができます(オーバーロードして返すことができます)、同様に、他のメソッドをモックすることができます
参照資料
テストについて:: MockObjectDBDについて::モックmrricoが提案したリンク