使用Perl Test :: More时,函数名称是否有约定?

时间:2020-03-05 18:48:07  来源:igfitidea点击:

使用Perl Test :: More或者Test :: Simple模块时,函数名称是否有约定?

我要特别询问的是用于在测试之前建立测试环境并在成功完成测试之后拆除环境的函数名称。

干杯,

解决方案

回答

我认为没有正式的约定,因此建议我们查看http://perldoc.perl.org/Test/More.html上的示例,并查看如何编写测试。

回答

谢谢埃斯波。

我已经看过相关的perldocs,但是关于设置和拆卸方面并没有真正的约定。

不像XUnit系列测试。

感谢我们提供答案Jagmal,但我不确定要使用BEGIN和END块进行设置和拆卸,因为我们不清楚名字的含义。还有一个明显的问题,即每个测试(即每个.t文件)仅运行一次安装程序和一次拆解运行。

我快速浏览了Test :: Most,它看起来真的很有趣,尤其是解释功能。谢谢马特。

嗯只是想进一步考虑使用BEGIN和END块,我在考虑是否要降低测试的粒度,以便只需要一个设置和一个拆解操作,那么这将是一个很好的解决方案。

干杯,

回答

我认为那里没有任何这样的约定。

如果要在整个文件中使用资源,则唯一的方法可能是使用BEGIN / END块。

我采用的一般方法是将相关测试放在一个代码块中,然后在那里初始化变量/资源等。我们也许可以轻松地对每个功能进行多少测试。

就像是 ...

BEGIN {
   # If you want to set some global db setting/file setting/INC changes etc
}

# Tests functionality 1...
{
     # have fun .... 
}

# Tests functionality 2...
{
     # have more fun .... 
}

END {
   # Clean up the BEGIN changes
}

另一方面,我们可能需要阅读此内容以在perl中进行测试... http://perlandmac.blogspot.com/2007/08/using-perl-testsimple-and-testmore.html

回答

我们将Test ::更广泛地用于单元测试,因为很多(大多数)数据处理脚本都是用Perl编写的。对于函数名称,我们没有特定的约定,而是按照Jagmal的建议进行操作,即将测试分解为较小的块,然后在本地进行初始化。

在我们的例子中,每个子测试都封装在测试脚本中的单独函数中。最重要的是,我们有一个框架,允许我们运行所有子测试(完整单元测试)或者调用单个子测试或者子测试集,以允许仅运行当前正在处理的子测试或者子测试集。

回答

我建议的第一个约定是抛弃Test :: More for Test :: Most

回答

Perl测试脚本在任何方面都不是特殊的或者不可思议的。这样,它们可以包含任何其他Perl脚本可以完全相同的内容。

我们可以为例程命名任何所需的名称,并在测试之前,之后和之间进行调用。

在任何测试之前,我们可以具有任意数量的初始化代码,在测试之后可以具有任意数量的清理代码,以及与测试混合在一起的任意数量的任何其他代码。

所有这些都假定我们正在谈论CPAN风格的t / *。t测试脚本。我想我们是,但如果我斜视正确,我可以设法将问题理解为有关扩展测试工具的问题。

回答

如果我们正在寻找更多XUnit风格的测试,请查看Test :: Class。它为方法提供了" Test(setup)"和" Test(teardown)"属性,这些方法可以很好地设置和拆除环境。它还为我们提供了一种更好的处理计划的方式(我们可以为每个测试方法分别提供一个,因此计算起来不那么麻烦),并允许我们通过测试类层次结构继承测试。

回答

如果我们也愿意接受验收测试,例如Ruby的Cucumber,请看一下使用Test :: More和黄瓜风格的验收测试的小示例http://github.com/kesor/p5-cucumber。