如何使用phpunit运行单个测试方法?

478

我正在努力使用phpunit运行文件escalation/EscalationGroupTest.php中名为testSaveAndDrop的单个测试方法。我尝试了以下组合:

phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=escalation/EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=testSaveAndDrop
在每种情况下都会执行文件escalation/EscalationGroupTest.php中的所有测试方法。如何只选择一个特定的方法呢?
类的名称是EscalationGroupTest,而phpunit的版本是3.2.8。

你的测试类的类名是什么? - sectus
14个回答

5
你的测试都被运行的原因是在文件名后面加了--filter标志。PHPUnit根本没有读取选项,因此会运行所有测试用例。
从帮助屏幕上可以看到:
 Usage: phpunit [options] UnitTest [UnitTest.php]
        phpunit [options] <directory>

按照@Alex和@Ferid Mövsümov的回答,将--filter参数移动到想要运行的测试文件之前。这样你就只会运行你想要的测试了。


我认为这不是解决原问题的方法...我曾经遇到同样需要在包含多个单元测试的文件中只运行其中一个测试的问题,而使用过滤器的另外两个答案对我很有帮助。 - jfoo
@jfoo OP的命令中存在一个问题,即--filter选项在文件名之后。另外两个答案给出了正确的答案,但没有指出为什么要应用过滤器。 - Schleis

2

1
我虽然来晚了,但个人不喜欢写整行代码。 相反,在.bash_profile文件中,我使用以下快捷方式。添加新别名后,请确保在 source .bash_profile 文件后再次运行,否则它将无法正常工作。
alias pa="php artisan"
alias pu="vendor/bin/phpunit" 
alias puf="vendor/bin/phpunit --filter"

使用方法:

puf function_name

puf filename

如果你使用 Visual Studio Code,你可以使用以下软件包来轻松进行测试。
Package Name: Better PHPUnit
Link: https://marketplace.visualstudio.com/items?itemName=calebporzio.better-phpunit

你可以在设置中设置按键绑定。我在我的MAC上使用Command + T绑定。
现在,当你将光标放在任何一个函数上并使用按键绑定时,它将自动运行该单个测试。
如果你需要运行整个,则将光标放在类的顶部,然后使用按键绑定。
如果你有其他问题,总是要调整终端
愉快的编码!

0

您必须使用 --filter 来运行单个测试方法

php phpunit --filter "/::testMethod( .*)?$/" ClassTest ClassTest.php

上述过滤器将仅执行 testMethod 测试方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接