我的代碼對糟糕的API調用進行了測試,幸運的是,代碼導致模塊本身發出警告。但是當我測試失敗的API調用時,我想在TAP中看不到警告。在TAP中靜音警告
t/01-pass.t .............. ok
t/02-fail.t .............. ok
t/03-noversion.t ......... ok
t/04-no-file.t ........... ok
Use of uninitialized value $file in concatenation (.) or string at /home/xenoterracide/projects/Test-Version/lib/Test/Version.pm line 29.
t/05-file-not-defined.t .. ok
# unsorted oks: 001
t/06-all.t ............... ok
All tests successful.
Files=6, Tests=37, 1 wallclock secs (0.04 usr 0.02 sys + 0.35 cusr 0.04 csys = 0.45 CPU)
Result: PASS
下面是實際的代碼
#!/usr/bin/perl
use 5.006;
use strict;
use warnings;
use Test::Tester tests => 7;
use Test::Version qw(version_ok);
check_test(
sub {
version_ok; # correct call version_ok($file)
},
{
ok => 0,
name => 'check version in ',
diag => 'FILE_NOT_DEFINED',
},
'$file not defined'
);
有沒有什麼辦法來壓制警告和預防,以防止它(原模塊中的no warnings
外)在TAP 結束了。
您應該修復代碼,以便在給出不正確的參數時不會發出警告。 – Schwern 2011-06-05 01:55:19
@schwern爲什麼?它會放棄並無法通過測試,這是它應該做的。代碼不應該沒有參數...我想知道的是,測試正常返回失敗 – xenoterracide 2011-06-05 03:46:18
@xenoterracide 1)它表示代碼沒有真正考慮過的情況,它的工作可能是巧合。 2)由於你沒有拋出異常(它可能應該拋出一個異常),因此在生產過程中,你將會得到該警告並阻塞日誌,並使讀者分心,而不是真正的問題。 3)在測試中,你必須做很多工作來壓制警告(和*只是*警告)以修復它。 4)如果你不這樣做,只需關閉該運行的所有警告,稍後可能會掩蓋另一個重要警告。 – Schwern 2011-06-05 19:54:41