如何测试需要具有用户凭据的CPAN包

时间:2016-02-13 21:32:05

标签: perl unit-testing automated-tests

我正在制作一个我打算在CPAN上发布的模块,这是一个公共API的客户端库。

API需要API凭据(client_id / secret),我不确定在为具有此类凭据的分发运行Perl测试方面的最佳做法是什么。

我:

  • 使用API​​创建一个虚拟帐户,并希望其他人不要乱用它?
  • 嘲笑请求和回复? < - 不赞成这一点,因为我认为模拟API客户端库的HTTP事务不是一个好主意
  • 不测试......:S

2 个答案:

答案 0 :(得分:5)

让测试期望环境变量中的凭据(或者如果它们很长或很复杂,那么配置文件)。如果未提供凭据,请让测试发出警告,其中包含有关使用凭据执行测试的说明。

List<A> list = new ArrayList<>();

Stream<A> streamA1 = list.stream();
Stream<B> streamB1 = (Stream<B>)streamA1;   // ERROR! Cannot cast from Stream<A> to Stream<B>

Stream<? extends A> streamA2 = list.stream();
Stream<B> streamB2 = (Stream<B>)streamA2;   // OK

自动测试系统(例如许多CPANTes用户)在测试之前永远不会配置模块,因此 use Test::More; unless ($ENV{MY_ID} && $ENV{MY_PWD}) { BAIL_OUT "*** This module requires credentials. Pass them in the MY_ID and MY_PWD environment variables, like MY_ID=username MY_PWD=passwd make test"; } 将测试结果注册到CPAN测试仪上作为“N / A”而不是失败

答案 1 :(得分:0)

我不认为这对于BAIL_OUT进行常见测试是个好主意,由cpan-testers自动运行和模块安装。

我认为您应该将测试移至xt目录(作者测试),该目录将仅由您运行。是的,转发凭据的最佳方式是ENV,建议使用 mob