发布于 2013-07-10 05:17:08
为什么不将API调用包装成小函数(例如,函数只做API调用),然后在测试中根据需要使用Test::MockObject或类似的方法模拟这些函数?
这将是更好的,因为您将能够测试与API不同的结果(失败、身份验证失败等)。
发布于 2013-07-10 05:12:58
我在文档中明确表示,如果没有API密钥,我的模块将毫无用处,并使用Test::More的skip:{}构造来跳过所有测试。你可以选择too bail_out而不是skip。
只需确保您的文档解释了如何将API密钥传递给模块即可。
发布于 2013-07-10 05:20:48
我处理这类事情的通常方式是需要一个环境变量来运行测试套件。环境变量将包含有用的信息(例如,API密钥、要连接的主机名等)。
下面是一个在测试文件中如何处理这类事情的示例。我们将其用于MongoDB发行版,以检查是否有可用的服务器可供运行:
BEGIN {
eval {
my $host = exists $ENV{MONGOD} ? $ENV{MONGOD} : 'localhost';
$conn = MongoDB::MongoClient->new( host => $host, ssl => $ENV{MONGO_SSL} );
};
if ( $@ ) {
plan skip_all => $@;
exit 0;
}
};所有这些操作都是尝试连接到在MONGOD环境变量(或localhost)中指定的主机。如果不能,它将跳过所有测试并说明原因。跳过仍然算作无故障,因此如果没有可用的测试服务器,它不会阻止模块的安装。
我在一个.pm文件中有这段代码,我在发行版中的每个.t文件中都使用use。
https://stackoverflow.com/questions/17558187
复制相似问题