3

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

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

干杯,

4

8 回答 8

4

如果您正在寻找更多 XUnit 风格的测试,请查看Test::Class。它为设置和拆除环境的方法提供Test(setup)和属性。Test(teardown)它还为您提供了一种更好的方式来处理计划(您可以为每个测试方法单独提供一个,因此计数不那么繁琐),并允许您通过测试类层次结构继承测试。

于 2008-09-16T10:08:13.710 回答
3

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

如果要在整个文件上使用资源,那么您可以做到这一点的唯一方法可能是使用 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

于 2008-09-05T11:07:25.627 回答
1

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

于 2008-09-05T09:58:32.923 回答
1

谢谢埃斯波。

我查看了相关的 perldocs,但没有关于设置和拆卸方面的真正约定。

不像 XUnit 系列的测试。

感谢 Jagmal 的回答,但我不确定是否使用 BEGIN 和 END 块进行设置和拆卸,因为你没有清楚地知道你在做什么。还有一个明显的问题是每次测试只有一次设置运行和一次拆卸运行,即每个 .t 文件。

我快速浏览了 Test::Most,它看起来非常有趣,尤其是 explain 函数。谢谢马特。

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

干杯,

于 2008-09-05T10:23:07.590 回答
1

我们将 Test::More 广泛用于我们的单元测试,因为我们的很多(大部分)数据处理脚本都是用 Perl 编写的。我们对函数名称没有特定的约定,而是像 Jagmal 建议的那样做一些事情,即将测试分成更小的块并在本地初始化。

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

于 2008-09-05T12:33:33.517 回答
0

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

于 2008-09-05T12:34:59.207 回答
0

Perl 测试脚本在任何方面都不是特别的或神奇的。因此,它们可以包含与任何其他 Perl 脚本完全相同的内容。

您可以将例程命名为任何您想要的名称,并在您的测试之前、之后以及与您的测试交织在一起调用它们。

您可以在任何测试之前拥有任意数量的初始化代码,在测试之后拥有任意数量的清理代码,以及在测试中混入任意数量的任何其他代码。

这一切都假设您正在谈论 CPAN 样式的 t/*.t 测试脚本。我认为您是,但是如果我眯着眼睛恰到好处,我可以设法将您的问题解读为关于扩展测试工具的问题。

于 2008-09-16T10:06:24.057 回答
0

If you are open to get into acceptance testing as well, like Ruby's Cucumber - take a look at this small example http://github.com/kesor/p5-cucumber that is using Test::More and a cucumber style of acceptance testing.

于 2009-03-13T12:31:08.877 回答