2

このモジュールに対して次のテストを実行すると、テストが失敗します。

エスケープ シーケンス「\e(U」に改行を追加すると、テストに合格します。

このエスケープ シーケンスが原因で、このようにテストが失敗するのはなぜですか?


package My_Module;

use Win32::Console::ANSI;

print "\e(U"; # dissables the so-called ANSI to OEM conversion

# print "\e(U\n" # written this way, the test passes.

1;

use Test::More tests => 1; 

BEGIN { use_ok( 'My_Module' ) || print "Bail out!\n" }

diag( "Testing My_Module, Perl $], $^X" );

結果:

C:\strawberry\perl\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib\lib', 'blib\arch')" t/*.t
t/00-load.t .. # Testing My_Module, Perl 5.018001, C:\strawberry\perl\bin\perl.exe
t/00-load.t .. Failed 1/1 subtests

Test Summary Report
-------------------
t/00-load.t (Wstat: 0 Tests: 0 Failed: 0)
  Parse errors: Bad plan.  You planned 1 tests but ran 0.
Files=1, Tests=0,  1 wallclock secs ( 0.03 usr +  0.05 sys =  0.08 CPU)
Result: FAIL
Failed 1/1 test programs. 0/0 subtests failed.
dmake:  Error code 255, while making 'test_dynamic'
4

1 に答える 1

3

詳細モードでテストを実行すると、テストの出力は次のようになります。

←(Uok 1 - use MyModule;

これは perl によって成功テストとして認識されていません。そうあるべきです: ok 1 - use MyModule;see the TAP specification .

モジュール print secuence に \n を追加すると、print "\e(U\n"おそらくテストに合格しますが、これがあなたの目的にとって間違っているかどうかはわかりません。

出力をテストする最良の方法は、 Test::Outputを使用することだと思います。

于 2013-09-03T08:05:35.777 に答える