【发布时间】:2010-11-27 16:33:19
【问题描述】:
我有一个 PHPUnit 测试类,我希望在测试运行中忽略它。我知道我可以通过重命名它使其文件名中不包含单词 Test 来做到这一点,但我宁愿不这样做,因为它比我想要的更混淆了源代码控制水域。
有人有什么建议吗?
【问题讨论】:
标签: php unit-testing phpunit
我有一个 PHPUnit 测试类,我希望在测试运行中忽略它。我知道我可以通过重命名它使其文件名中不包含单词 Test 来做到这一点,但我宁愿不这样做,因为它比我想要的更混淆了源代码控制水域。
有人有什么建议吗?
【问题讨论】:
标签: php unit-testing phpunit
phpunit 命令有几个选项可以帮助定义应该和不应该运行哪些测试:
$ phpunit --help
PHPUnit 3.4.0beta5 by Sebastian Bergmann.
Usage: phpunit [switches] UnitTest [UnitTest.php]
phpunit [switches] <directory>
...
--filter <pattern> Filter which tests to run.
--group ... Only runs tests from the specified group(s).
--exclude-group ... Exclude tests from the specified group(s).
--list-groups List available test groups.
...
那些可能不允许指定确切你想要什么......但他们可能会有所帮助。
更多详情请见The Command-Line Test Runner
特别是,我有点喜欢分组功能:只需在测试的 phpdoc 中使用 @group 标记,将它们重新分组(例如,每个“功能块”一组);然后,您可以在命令行上使用--group 或--exclude-group 选项来指定应该或不应该运行哪些测试。
在你的情况下,如果你不能修改测试,也许 --filter 选项会有所帮助,这取决于你的测试是如何命名的(即,如果有一种方法可以识别你想要运行的那些):
--filter
仅运行名称与给定模式匹配的测试。图案可以是 单个测试的名称或 匹配的正则表达式 多个测试名称。
如果您不总是更改要运行的测试“组”,另一种解决方案可能是使用仅包含您要运行的测试的测试套件。
【讨论】:
@group slow,并使用phpunit.xml 文件默认排除它们。如果我想再次包含它们,我只需运行phpunit --no-configuration --group slow。
phpunit --exclude-group __no-group__; __no-group__ 可以被任何不存在的随机组名替换,结果仍然相同。不要与 real 组混淆,__nogroup__!
只需重命名您的方法:
testFunctionality () { //废话 }
到
ignore_testFunctionality () { //废话 }
【讨论】:
我意识到这是一个已被接受的老问题,所以我希望我没有打扰,但我只想指出,为了完成,skip tests 是可能的。 PHPUnit 不会执行不完整和跳过的测试。
当然,这是在每个测试级别上的 - 但是,您可以通过将其放入课堂'setUp() 来巩固它。
只是一个提示。
【讨论】:
我更喜欢为我的函数使用普通名称并放入函数 docBloc
/**
* @test
*/
public function getDetails()
{}
所以,当我不想运行此测试时,我只需删除该@test。 另外,也许你会在这里找到有用的东西PHPUnit - The XML Configuration File 我在“排除”标签测试中添加了我不想被 phpunit 覆盖的测试。
【讨论】: