首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于API的perl测试套件

问用于API的perl测试套件
EN

Stack Overflow用户
提问于 2013-07-10 05:05:47
回答 3查看 552关注 0票数 5

我正在编写一个与API接口的perl模块,我想在把它放到CPAN上之前为它写一个测试套件。但是,由于此模块基本上只是API的一个接口,因此所有测试都需要有效的API密钥和用户。显然,我不能在测试套件中使用API密钥和用户名发布此模块,那么处理此类事件的最佳方法是什么呢?我是不是应该只在本地测试,然后把它放在CPAN上,而不进行测试?以前有没有人遇到过这种情况,并提出了一个好的解决方案?我知道编写测试是最好的实践,所以如果可以的话,我想这样做。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-10 05:17:08

为什么不将API调用包装成小函数(例如,函数只做API调用),然后在测试中根据需要使用Test::MockObject或类似的方法模拟这些函数?

这将是更好的,因为您将能够测试与API不同的结果(失败、身份验证失败等)。

票数 4
EN

Stack Overflow用户

发布于 2013-07-10 05:12:58

我在文档中明确表示,如果没有API密钥,我的模块将毫无用处,并使用Test::More的skip:{}构造来跳过所有测试。你可以选择too bail_out而不是skip。

只需确保您的文档解释了如何将API密钥传递给模块即可。

票数 3
EN

Stack Overflow用户

发布于 2013-07-10 05:20:48

我处理这类事情的通常方式是需要一个环境变量来运行测试套件。环境变量将包含有用的信息(例如,API密钥、要连接的主机名等)。

下面是一个在测试文件中如何处理这类事情的示例。我们将其用于MongoDB发行版,以检查是否有可用的服务器可供运行:

代码语言:javascript
复制
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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17558187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档