使用Perl证明而不是pg_prove运行pgTAP

时间:2013-05-24 14:41:20

标签: perl postgresql tap

我有像往常一样的Perl项目的测试套件,包含libt目录。 t中的测试是通过子目录构建的。所以我使用:

运行它们
prove -Ilib -r t/

到目前为止,没有什么特别的,并且在Perl中进行了非常标准的测试方式。

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

“如果您在prove -r上运行t,那么您已经测试了所有测试内容。”

这是非常重要的,因为否则你永远无法确定你是否真的打过所有测试而且这些东西都很好。有人可能会打电话给上面的人 - 可能不知道 - 只是调用可用测试的一部分,留下一些。非常烦人的......没有运行的测试没有任何帮助。开发人员调用所有测试应该尽可能简单和预测!当你必须查看如何运行其余的测试套装时,这是一件坏事。你可能不知道它,或者可能不会这样做。

所以我的问题就出现了:我必须使用pgTAP集成一些测试,然后提供工具pg_prove。现在我必须做两个突击队员来进行测试。除了运行prove -Ilib -r之外,我还必须运行类似于pg_prove -S schema=customerX -U dbuser -d dbname t/pgTAP/*.sql。如果您从cron或任何地方自动调用测试,问题就不那么大了。但它确实降低了我们 lazy 开发人员在繁忙日子里运行所有测试测试的机会。

所以我想知道以prove还包括那些测试的方式实现测试的最佳方法是什么。是的,我必须创建一些.t - 文件包装整个事物(以及如何?)?我可以用CPAN上的所有Harness内容做些什么技巧吗?根目录中的简单test_all.sh(包括两个突击队员)是否会做得最好,即使它打破了我上面做出的假设?

所以我的问题简直就是:我可以运行所有测试,包括pgTAP和prove吗?如果没有,是否有解决问题的最佳做法?

非常感谢。

1 个答案:

答案 0 :(得分: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运行所有测试,就像我已经完成for circle一样。 有关详细信息,请参阅the TAP::Parser::SourceHandler::pgTAP documentation