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

时间:2014-09-29 07:56:30

标签: php phpunit

我正在努力在文件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中的所有测试方法。如何选择一种方法呢?

班级名称为EscalationGroupTestphpunit版本为3.2.8。

13 个答案:

答案 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也将运行testSaveAndDroptestSave*开头的其他功能,这很奇怪!!

答案 3 :(得分:36)

以下命令将执行完全 testSaveAndDrop测试。

phpunit --filter '/::testSaveAndDrop$/' escalation/EscalationGroupTest.php

答案 4 :(得分:18)

所以,像这样

phpunit --filter 'EscalationGroupTest::testSaveAndDrop' EscalationGroupTest escalation/EscalationGroupTest.php 

没有='

https://phpunit.de/manual/3.7/en/textui.html

答案 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中,可以右键单击测试方法并单击“运行聚焦测试方法”。

Run Focused Test Method menu

答案 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 绑定。

现在,将光标放在任何功能上,然后使用按键绑定,它将自动运行该测试。

如果您需要运行整个,则将光标放在类的顶部,然后使用键绑定。

如果您有其他任何事情,请务必每周与端子

快乐编码!