我想在我的项目中测试特定的 testClass,因为有很多测试类失败了,我只想一次测试一个类。
我在以下文件夹 \test\repositories\ApplicationVersionFormat.php
中创建了测试类:
<?php
use App\Repositories\ApplicationVersionFormat;
class ApplicationVersionFormatTest extends \TestCase
{
public function testValidFormat()
{
$version = '1.2.3';
$appVersion = new ApplicationVersionFormat();
$this->assertEquals(true,$appVersion->isValidVersion($version));
}
public function testInvalidFormat()
{
$version = '11.2.3';
$appVersion = new ApplicationVersionFormat();
$this->assertEquals(false,$appVersion->isValidVersion($version));
}
public function testInvalidFormat2()
{
$version = '1.22.3';
$appVersion = new ApplicationVersionFormat();
$this->assertEquals(false,$appVersion->isValidVersion($version));
}
public function testInvalidFormat3()
{
$version = '1.2.33';
$appVersion = new ApplicationVersionFormat();
$this->assertEquals(false,$appVersion->isValidVersion($version));
}
public function testInvalidFormat4()
{
$version = '11.22.33';
$appVersion = new ApplicationVersionFormat();
$this->assertEquals(false,$appVersion->isValidVersion($version));
}
}
所以我尝试了这个以下命令,但这些都不起作用:
phpunit“存储库\AppVersionTest”。 => 无法打开文件“test/repositories/AppVersionTest.php”
phpunit "测试\存储库\AppVersionTest"。 => 无法打开文件“test/repositories/AppVersionTest.php”
phpunit --filter "repositories\AppVersionTest"。 => 没有执行任何测试!
phpunit --testsuite "repositories\AppVersionTest"。 => 没有执行任何测试!
有什么帮助吗?谢谢
尝试了几种方法后,我发现我不需要包含文件夹来测试特定的测试类。这对我有用,它运行类上的所有测试:
phpunit --filter ApplicationVersionFormatTest
我认为这是因为我的 ApplicationVersionFormatTest 扩展了 TestCase 并返回了用作 Laravel 所有组件的“粘合剂”的应用程序实例。
通过多种方式在 laravel 中运行 phpunit 测试..
vendor/bin/phpunit --filter methodName className pathTofile.php
vendor/bin/phpunit --filter 'namespace\\directoryName\\className::methodName'
对于测试单类:
vendor/bin/phpunit tests/Feature/UserTest.php
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
vendor/bin/phpunit --filter tests/Feature/UserTest.php
返回到我的案例中执行的测试。
要使用 artisan
执行相同的操作,请运行:
php artisan test --filter ApplicationVersionFormatTest
对于较新的版本,这可能有效
php artisan test --filter {MethodName}
// for instance
php artisan test --filter test_example
或者
php artisan test --filter {ClassName}::{MethodName}
//for instance
php artisan test --filter ExampleTest::test_example
您可能可以使用 this answer 来管理相关问题。
只需使用 @group
注释标记类并使用 --group <group_name>
运行 PHPUnit
更新
您的 --filter
命令不完整。试试这个:phpunit --filter AppVersionTest "repositories\ApplicationVersionFormat.php"
phpunit --filter <relative_path_to_file>
例如,要测试的文件是 test/repos/EloquentPushTest.php
、test/repos/EloquentWebTest.php
用于测试 EloquentWebTest.php
使用phpunit --filter ./repos/ElqouentWebpush
使用示例:
php phpunit-5.7.27.phar -c app/ "src/package/TestBundle/Tests/Controller/ExampleControllerTest.php"
对于 laravel 8
php artisan test --filter ExampleTest
使用 phpunit.xml
@group
选项可用于类和方法。
A级
/**
* @group active
* */
class ArrayShiftRightTest extends TestCase
{
}
B类
/**
* @group inactive
* */
class BinaryGapTest extends TestCase
{
}
在phpunit.xml
<groups>
<include>
<group>active</group>
</include>
<exclude>
<group>inactive</group>
</exclude>
</groups>
属于组 active 的类将被执行。