Test :: Builder :: Tester是否可以忽略测试失败时的测试诊断?

时间:2014-03-01 03:24:39

标签: perl testing

我有这样的事情:

test_out( 'not ok 1 - file_mtime_age_ok failure' );
file_mtime_age_ok( $mtime_file, 60*9, 'file_mtime_age_ok failure' );
test_test('file_mime_age_ok failure works');
如果测试失败,

和file_mtime_age_ok会生成一些诊断信息。像:

# Filename [mtime_file] mtime [1393641131] is not 540 seconds within current system time [1393641731].
#   Failed test 'file_mtime_age_ok failure'
#   at t/file_mtime.t line 42.

我不想担心测试诊断。深入研究test_diag代码,我发现传递给test_diag的内容最终会被\Q...\E here引用,因此没有正则表达式可行。有没有一种方法可以通过Test::Builder::Tester测试诊断并仍然测试我的测试失败?我尝试了一些偷偷摸摸的东西,比如open(my $oldout, '>&', STDERR)然后open(STDERR, '>', '/dev/null'),然后恢复,但我无法正常工作。 STDERR在Test :: Builder :: Tester中绑定,我会说实话,我从不使用tie,所以我对它们的工作知识很浅。

感谢您的任何见解。

- 迈克

1 个答案:

答案 0 :(得分:0)

我开始深入研究github问题以进行测试,因为之前有人必须报告过这样的问题而且我遇到issue 387这有点相关,但并不完全相同。似乎我可能想要做的是使用test_err来测试STDERR,它似乎能够接受正则表达式,至少在Test :: Simple 0.99中接受正则表达式(这在0.98中被破坏)。

所以我最终得到了类似的东西:

  test_out( 'not ok 1 - file_mtime_age_ok failure' );
  test_err(qr/\s*#\s*Filename \[$mtime_file\] [^\n]+\n/);
  test_fail(+1);
  file_mtime_age_ok( $mtime_file, 60*9, 'file_mtime_age_ok failure' );
  test_test('file_mime_age_ok failure works');

哪个有效!我仍然认为test_diag应该能够处理正则表达式,但test_err现在可以使用