2

我正在编写一个我想尽快上传到 CPAN 的 Perl 模块。我已经为它编写了一个测试套件,以确保我不会在版本之间破坏任何东西。什么样的测试应该在安装时运行而不是只在发布时运行?我唯一能确定的只有发布时间的是 POD 检查器、Perl 评论检查器等。

4

2 回答 2

2

在安装时尽可能多地进行测试是没有害处的,除非它是一个脆弱的或需要很长时间才能完成的测试。请记住,如果您默认不运行测试,CPAN 上的模块自动测试器也不会运行它们。

于 2012-10-16T22:04:17.643 回答
0

一般来说,如果...

  • 它只与模块的分布有关
  • 结果不会在用户的环境中改变
  • 结果不影响运行时间
  • 测试很难使可靠
  • 测试有很多昂贵的依赖

这是一个务实的选择,没有一成不变的公式。这是一种平衡,一方面是捕捉所有可能的错误,另一方面是安装模块的简便性和可靠性。你不想错过错误,但你不想要误报,你不想要太多的依赖关系只是为了测试它。

Test::XTTest::Distribution提供了一套针对大多数模块运行的库存测试,其中包括测试 POD、是否有某些重要文件(如更改日志、自述文件)、清单是否正确等等. 只有当它们几乎通过了上述所有规则时,它们中的大部分内容才应该被释放。

一个很好的例子是测试 POD,无论是正确性 (Test::Pod) 还是完整性 (Test::Pod::Coverage)。一方面,它们都不会影响运行时,并且都需要额外的模块。但是安装用户可能有不同的 POD 解析器,这可能会导致 POD 损坏。但是,损坏通常是微不足道的,不会严重影响文档的实用性。因此,虽然在安装时测试 POD可能会发现一些小的 POD 错误,但这不值得麻烦。

Test::Perl::Critic 是一个明确的仅发布测试。结果是完全静态的,与运行时无关。没有什么比安装失败更令人沮丧的了,因为作者使用了非经典的引用风格或一些微不足道的东西。

Test::DependenciesTest::DependentModules也是很好的案例研究。它有很多依赖关系,它很挑剔,而且它的结果在安装时不太可能改变。

于 2012-10-17T03:29:15.080 回答