Perl发布测试与安装时间测试

时间:2012-10-16 21:36:54

标签: perl unit-testing

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

2 个答案:

答案 0 :(得分:2)

在安装时尽量避免测试,除非测试是脆弱的或需要很长时间才能完成。请记住,如果您默认不运行测试,CPAN上的模块自动测试人员也不会运行它们。

答案 1 :(得分:1)

一般情况下,如果...

,请将测试作为发布时间测试
  • 它只与模块的分发有关
  • 结果不会在用户环境中发生变化
  • 结果不影响运行时
  • 测试难以可靠
  • 测试有很多昂贵的依赖

这是一个务实的选择,没有硬性和快速的公式。一方面,它捕获所有可能的错误,另一方面,安装模块的简易性和可靠性之间的平衡。你不想错过bug,但你不想要误报,并且你不需要太多的依赖来测试它。

Test::XTTest::Distribution提供了一系列库存测试来针对大多数模块运行,其中包括测试POD,如果您有某些重要文件,如更改日志,README,如果您的MANIFEST是正确的等等。其中的大多数内容应仅在通过上述所有规则时才发布。

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

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

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