我正在努力在文件testSaveAndDrop
中使用escalation/EscalationGroupTest.php
运行名为phpunit
的单个测试方法。我尝试了以下组合:
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。
答案 0 :(得分:350)
以下命令对单个方法运行测试:
phpunit --filter testSaveAndDrop EscalationGroupTest escalation/EscalationGroupTest.php
phpunit --filter methodName ClassName path/to/file.php
对于较新版本的phpunit,它只是:
phpunit --filter methodName path/to/file.php
答案 1 :(得分:190)
我更喜欢在注释中将测试标记为
/**
* @group failing
* Tests the api edit form
*/
public function testEditAction()
然后用
运行它phpunit --group failing
无需在命令行中指定完整路径,但您必须记住在提交之前删除它,而不是使代码混乱。
您还可以为单个测试指定多个组
/**
* @group failing
* @group bug2204
*/
public function testSomethingElse()
{
}
答案 2 :(得分:104)
这是更通用的答案:
如果您确定方法名称是唯一的,则只能按方法名称进行过滤(这适用于我)
phpunit --filter {TestMethodName}
但是,指定文件路径/引用也更安全
phpunit --filter {TestMethodName} {FilePath}
示例:
phpunit --filter testSaveAndDrop reference/to/escalation/EscalationGroupTest.php
快速注意:我注意到如果我有一个名为testSave
的函数,另一个名为testSaveAndDrop
的函数使用命令phpunit --filter testSave
也将运行testSaveAndDrop
以testSave*
开头的其他功能,这很奇怪!!
答案 3 :(得分:36)
以下命令将执行完全 testSaveAndDrop
测试。
phpunit --filter '/::testSaveAndDrop$/' escalation/EscalationGroupTest.php
答案 4 :(得分:18)
所以,像这样
phpunit --filter 'EscalationGroupTest::testSaveAndDrop' EscalationGroupTest escalation/EscalationGroupTest.php
没有=
和'
答案 5 :(得分:13)
通过多种方式在laravel中运行phpunit测试..
vendor/bin/phpunit --filter methodName className pathTofile.php
vendor/bin/phpunit --filter 'namespace\\directoryName\\className::methodName'
用于测试单个班级:
vendor/bin/phpunit --filter tests/Feature/UserTest.php
vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest'
vendor/bin/phpunit --filter 'UserTest'
用于测试单个方法:
vendor/bin/phpunit --filter testExample
vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest::testExample'
vendor/bin/phpunit --filter testExample UserTest tests/Feature/UserTest.php
用于命名空间中所有类的运行测试:
vendor/bin/phpunit --filter 'Tests\\Feature'
更多方式运行测试see more
答案 6 :(得分:7)
如果您在netbeans中,可以右键单击测试方法并单击“运行聚焦测试方法”。
答案 7 :(得分:7)
你可以尝试这个我能够运行单个测试用例
phpunit tests/{testfilename}
例如:
phpunit tests/StackoverflowTest.php
如果您想在Laravel 5.5中运行单个测试用例,请尝试
vendor/bin/phpunit tests/Feature/{testfilename}
vendor/bin/phpunit tests/Unit/{testfilename}
例如:
vendor/bin/phpunit tests/Feature/ContactpageTest.php
vendor/bin/phpunit tests/Unit/ContactpageTest.php
答案 8 :(得分:4)
您的测试全部运行的原因是文件名后面有--filter
标志。 PHPUnit根本没有读取选项,因此运行所有测试用例。
从帮助屏幕:
Usage: phpunit [options] UnitTest [UnitTest.php]
phpunit [options] <directory>
所以将--filter
参数移到你想要的测试文件之前,如@Alex和
@FeridMövsümov回答。而且你应该只进行你想要的测试。
答案 9 :(得分:2)
vendor/bin/phpunit --filter 'Your method name'
答案 10 :(得分:1)
如果您正在使用XML配置文件,则可以在phpunit
标记内添加以下内容:
<groups>
<include>
<group>nameToInclude</group>
</include>
<exclude>
<group>nameToExclude</group>
</exclude>
</groups>
请参阅https://phpunit.de/manual/current/en/appendixes.configuration.html
答案 11 :(得分:0)
您必须使用--filter来运行单个测试方法
php phpunit --filter "/::testMethod( .*)?$/" ClassTest ClassTest.php
上面的过滤器将单独运行testMethod。
答案 12 :(得分:0)
我晚会晚了。但是作为个人,我不愿意写整行。
相反,我在 .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代码,则可以使用以下程序包使测试变得轻而易举。
Package Name: Better PHPUnit
Link: https://marketplace.visualstudio.com/items?itemName=calebporzio.better-phpunit
然后可以在设置中设置键盘绑定。我在MAC中使用 Command + T 绑定。
现在,将光标放在任何功能上,然后使用按键绑定,它将自动运行该测试。
如果您需要运行整个类,则将光标放在类的顶部,然后使用键绑定。
如果您有其他任何事情,请务必每周与端子
快乐编码!