如何使用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。

288278 次浏览

就像这样

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

没有=,有'

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

下面的命令在单个方法上运行测试:

phpunit --filter testSaveAndDrop EscalationGroupTest escalation/EscalationGroupTest.php


phpunit --filter methodName ClassName path/to/file.php

对于phpunit的新版本,它只是:

phpunit --filter methodName path/to/file.php

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

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

运行所有测试的原因是文件名后面有--filter标志。PHPUnit根本不读取选项,因此正在运行所有的测试用例。

从帮助屏幕:

 Usage: phpunit [options] UnitTest [UnitTest.php]
phpunit [options] <directory>
所以将--filter参数移动到你想要的测试文件之前,就像@Alex和 @Ferid Mövsümov回答。你应该只运行你想要的测试

我更喜欢在注释中将测试标记为

/**
* @group failing
* Tests the api edit form
*/
public function testEditAction()

然后用

phpunit --group failing

不需要在命令行中指定完整的路径,但您必须记住在提交之前删除它,以免使代码混乱。

您还可以为单个测试指定几个组

/**
* @group failing
* @group bug2204
*/
public function testSomethingElse()
{
}

如果您在netbeans中,您可以右键单击测试方法,然后单击“运行集中测试方法”。

Run Focused Test Method menu

下面是更一般的答案:

如果你确定方法名是唯一的,你只能通过方法名(这对我有用)进行筛选

phpunit --filter {TestMethodName}

不过,指定文件路径/引用也更安全

phpunit --filter {TestMethodName} {FilePath}

例子:

phpunit --filter testSaveAndDrop reference/to/escalation/EscalationGroupTest.php

快速提示:我注意到,如果我有一个名为testSave的函数,而另一个名为testSaveAndDrop的函数使用phpunit --filter testSave命令也会运行testSaveAndDrop和任何其他以testSave*开头的函数,这很奇怪!!

如果你正在使用XML配置文件,你可以在phpunit标记中添加以下内容:

<groups>
<include>
<group>nameToInclude</group>
</include>
<exclude>
<group>nameToExclude</group>
</exclude>
</groups>

看到https://phpunit.de/manual/current/en/appendixes.configuration.html

您必须使用——filter来运行单个测试方法 php phpunit --filter "/::testMethod( .*)?$/" ClassTest ClassTest.php < / p >

上面的过滤器将单独运行testMethod。

你可以试试这个,我能够运行单个测试用例

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

为在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'

更多方法运行测试查看更多

不过我来晚了。但就我个人而言,我讨厌写整句话。

相反,我在. bash_profile文件中使用以下快捷方式,以确保在添加任何新别名后源. 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绑定。

现在,一旦你把光标放在任意函数上,然后使用键绑定,它就会自动运行这个测试。

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

如果你有任何其他事情,那么总是用终端

编码快乐!

  • 在你的项目根目录中运行这个,我在laravel根目录中使用。

vendor/bin/phpunit --filter 'Your method name'

自定义方法名的示例。

 /** @test //Initilize this for custom method name, without test keyword
*
* Test case For Dashboard When User Not logged In it will redirect To login page
*/
public function only_logged_in_user_see_dashboard()
{
$response = $this->get('/dashboard')
->assertRedirect('/login');
}

带有test关键字的示例

/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$this->assertTrue(true);
}

考虑到你

vendor/bin/phpunit --filter=EscalationGroupTest::testSaveAndDrop