【发布时间】:2010-09-07 21:53:01
【问题描述】:
在使用 Perl Test::More 或 Test::Simple 模块时,函数名称是否有约定?
我专门询问用于在测试之前设置测试环境并在成功完成测试后拆除环境的函数的名称。
干杯,
罗伯
【问题讨论】:
标签: perl testing frameworks
在使用 Perl Test::More 或 Test::Simple 模块时,函数名称是否有约定?
我专门询问用于在测试之前设置测试环境并在成功完成测试后拆除环境的函数的名称。
干杯,
罗伯
【问题讨论】:
标签: perl testing frameworks
如果您正在寻找更多 XUnit 风格的测试,请查看 Test::Class。它为设置和拆除环境的方法提供了Test(setup) 和Test(teardown) 属性。它还为您提供了一种更好的计划处理方式(您可以为每个测试方法单独提供一个,因此计数不那么繁琐)并允许您通过测试类层次结构继承测试。
【讨论】:
我不认为有任何这样的约定。
如果要在整个文件中使用资源,您可以这样做的唯一方法可能是使用 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
【讨论】:
我认为没有一套正式的约定,所以我建议查看http://perldoc.perl.org/Test/More.html 的示例,看看他们是如何编写测试的。
【讨论】:
我们在单元测试中更广泛地使用 Test::,因为我们的很多(大部分)数据处理脚本都是用 Perl 编写的。我们对函数名称没有特定的约定,而是像 Jagmal 建议的那样做一些事情,即将测试分成更小的块并在本地初始化。
在我们的例子中,每个子测试都封装在测试脚本中的一个单独函数中。最重要的是,我们有一个框架允许我们运行所有子测试(完整的单元测试)或调用单个子测试或子测试集以允许仅运行我们目前正在处理的子测试。
【讨论】:
感谢埃斯波。
我查看了相关的 perldocs,但没有关于设置和拆卸方面的真正约定。
不像 XUnit 系列的测试。
感谢 Jagmal 的回答,但我不确定是否要使用 BEGIN 和 END 块进行设置和拆卸,因为您没有通过名称明确说明您在做什么。还有一个明显的问题是每次测试只有一次设置运行和一次拆卸运行,即每个 .t 文件。
我快速浏览了 Test::Most,它看起来非常有趣,尤其是解释函数。谢谢马特。
嗯。只是进一步考虑使用 BEGIN 和 END 块,我在想如果我降低测试的粒度以便只需要一个设置和一个拆卸,那么这将是一个很好的解决方案。
干杯,
罗伯
【讨论】:
我建议的第一个约定是放弃 Test::More for Test::Most
【讨论】:
Perl 测试脚本在任何方面都不是特别的或神奇的。因此,它们可以包含与任何其他 Perl 脚本完全相同的内容。
您可以为例程命名任何您想要的名称,并在您的测试之前、之后以及与您的测试交织在一起调用它们。
您可以在任何测试之前使用任意数量的初始化代码,在测试之后使用任意数量的清理代码,以及在测试中混入任意数量的任何其他代码。
这一切都假设您在谈论 CPAN 样式的 t/*.t 测试脚本。我认为您是,但是如果我眯着眼睛恰到好处,我可以设法将您的问题解读为关于扩展测试工具的问题。
【讨论】:
如果您也愿意参与验收测试,比如 Ruby 的 Cucumber - 看看这个小例子 http://github.com/kesor/p5-cucumber,它使用了 Test::More 和黄瓜风格的验收测试。
【讨论】: