【发布时间】:2022-10-19 20:34:40
【问题描述】:
在我的模块 Foo.pm 中,我得到了一些匿名函数,例如
our $anon = sub {
my $parameter = shift;
return $parameter * $parameter;
}
我正在使用Test::More 为我的模块中的函数编写单元测试。
对于普通的子程序,我可以使用can_ok("Foo.pm", @subs) 和包含子程序名称的@subs。对于匿名函数,我收到以下错误:
Foo->can('$anon') failed
有没有办法取消引用函数并将它们传递给can_ok()?
【问题讨论】:
-
我不清楚您要测试什么。 can_ok('Foo.pm", "bar") 基本上是在测试您是否可以在 Foo 对象上调用 bar() 方法,即 Foo->bar() 不会崩溃。您要测试什么方法用你的匿名子?你通常如何调用该方法?
-
@DaveMitchell afaik
can_ok()测试是否可以调用方法。在我的示例中,它测试@subs中的所有方法是否可调用。必须取消引用匿名子例程才能调用它们,例如&$anon($parameter) -
所以你本质上想测试 $Foo::anon 是否设置为 coderef?
is(ref $Foo::anon, 'CODE')怎么样?
标签: function unit-testing perl testing anonymous-function