【问题标题】:How to test for 'use' *failure*?如何测试“使用”*失败*?
【发布时间】:2014-09-17 14:38:10
【问题描述】:

Test::More 提供常用的use_ok 测试来测试模块是否正确加载。但是我如何测试一个模块 fails 加载? Test::Exception 为类似故障提供 dies_ok 和表兄弟,但不是在使用时。

当模块需要特定参数或特定环境才能正确加载,并且我想测试这些条件时,这很有用。例如,也许我的“Foo”模块需要一个配置参数,否则应该无法加载:

use Foo 'eat my hat';  # This should work
use Foo; # This should die

我可以使用 Test::More 轻松测试第一个案例:

BEGIN { use_ok('Foo','eat my hat') }

但是我怎样才能测试另一个呢?

BEGIN { use_not_ok('Foo') }  # use_not_ok doesn't exist

【问题讨论】:

  • 我不确定这是个好主意。您确定不希望 use Foo;use Foo (); 相同吗?
  • 在我的情况下,我将文件名作为参数传递给模块,如果未指定文件名,它应该死,或者如果文件不存在,它应该死,或者即使文件包含无效内容,它也应该死掉。
  • 是的,我不确定这是个好主意。 use Foo (); 只是加载你的模块。为什么不use Foo;
  • @ikegami:也许我不明白你在说什么,但在我的情况下,'use Foo ()' 也失败了......
  • 如果这是真的,那么use Foo 'eat my hat';也是如此

标签: perl unit-testing exception


【解决方案1】:
use Foo;

BEGIN { require Foo; import Foo; }

所以

BEGIN { ok(!eval { require Foo; import Foo; 1 }); }

但我会选择的

BEGIN { ok(!eval('use Foo; 1')); }

【讨论】:

  • 这回答了我的问题。不过,我想知道是否有可能扩展解决方案,让我也能捕捉到抛出的错误?即如果模块可以以不同的输出终止,我可以测试它是否正常终止?
  • 邮件放在$@。随心所欲。
猜你喜欢
  • 2012-09-12
  • 1970-01-01
  • 2022-07-25
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多