如何在 Perl 单元测试中重用模拟对象?

How to reuse mock objects in Perl unit tests?

我的模块有一堆单元测试,我发现我将相同的模拟和设置代码从一个复制到另一个。我怎样才能擦干它并重新使用模拟代码?

我已将这个简单的模拟对象放在我的测试旁边:

package MockObject;
1;

如果我在测试用例中只说use MockObject;make test找不到MockObject。说得通;毕竟,它没有安装在系统范围内,也不在被测模块旁边。

我可以 运行 我的测试 prove -I lib -I t t/*.t 但我想保留 make test,如果只是为了懒惰少输入几个字符。

由于模拟对象不是一个完整的模块,无论如何都不应该正式安装,我不能也不想在 Makefile.PL 中设置 TEST_REQUIRES

test => { FILES => 't/*.t', INC => 't/' } 添加到 Makefile.PL 没有帮助。

我如何(简单地)将 Perl 模拟代码与 MakeMaker 生成的 Makefile 重用?

设置 PERL5LIB 或在脚本中添加 use lib。我发现 FindBin package 对于设置测试的 lib 路径很有用。

use FindBin qw($Bin);
use lib "$Bin/../lib";

其中:

$Bin - path to bin directory from where script was invoked