1

我有一个像往常一样的 Perl 项目的测试套件,包含一个lib和一个t目录。中的测试t是通过子目录构建的。所以我使用以下方法运行它们:

prove -Ilib -r t/

到目前为止没有什么特别的,而且 afaik 是一种在 Perl 中进行测试的标准方法。

由于假设这是标准的测试方式,我想确保以下内容适用:

“如果你继续运行prove -rt你已经测试了所有可以测试的东西”。

这是非常重要的,因为否则你永远无法确定你真的调用了所有的测试并且一切都很好。调用上述内容的人可能会 - 不知道 - 只是调用部分可用测试,而留下一些。很烦人......没有运行的测试没有帮助。开发人员调用所有测试应该尽可能简单和具有预测性!当您必须查找如何运行其余的测试服时,这是一件坏事。你可能不知道,或者无论如何都不会这样做。

所以我的问题来了:我必须使用提供工具的pgTAPpg_prove集成一些测试。现在我必须组成两个突击队来进行测试。除了运行之外,prove -Ilib -r我还必须运行类似的东西pg_prove -S schema=customerX -U dbuser -d dbname t/pgTAP/*.sql。如果您自动调用测试,问题并不大cron。但这确实减少了我们懒惰的开发人员在忙碌的日子里运行所有测试测试的机会。

因此,我想知道以prove包含这些测试的方式实施测试的最佳方法是什么。是不是我必须创建一些.t包装整个东西的文件(以及如何?)?我可以用HarnessCPAN 上的所有东西做任何技巧吗?根目录中的一个简单test_all.sh的,包括两个突击队,会做得最好,即使它打破了我上面所做的假设?

所以简而言之我的问题是:我可以运行所有测试,包括 pgTAPprove吗?如果没有,是否有解决我的问题的最佳实践?

非常感谢。

4

1 回答 1

1

是的。实际上,pg_prove只是将所有内容传递给prove. 假设您的 pgTAP 测试以 结尾.sql,您可以像这样运行所有测试:

prove -lr --ext .sql --ext .t \
--source pgTAP \
--pgtap-option dbname=dbname \
--pgtap-option username=dbuser \
--pgtap-option suffix=.pg \
--pgtap-option set=schema=customerX

如果您使用 Module::Build,您也可以./Build test运行所有测试,就像我为 circle所做的那样。有关详细信息,请参阅TAP::Parser::SourceHandler::pgTAP 文档

于 2013-05-24T18:09:21.923 回答