ChatGPT解决这个技术问题 Extra ChatGPT

如何在 laravel 中使用 phpunit 测试特定的测试类

我想在我的项目中测试特定的 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.xml(.dist) 文件中的某些包含/排除配置。你能发布这个文件吗?

G
Gujarat Santana

尝试了几种方法后,我发现我不需要包含文件夹来测试特定的测试类。这对我有用,它运行类上的所有测试:

phpunit --filter ApplicationVersionFormatTest

我认为这是因为我的 ApplicationVersionFormatTest 扩展了 TestCase 并返回了用作 Laravel 所有组件的“粘合剂”的应用程序实例。


除了 phpunit 命令之外,您还可以使用 test Artisan 命令来运行您的测试。 Artisan 测试运行器提供详细的测试报告以简化开发和调试:
我试图把整个测试命名空间,但没有奏效;您应该只传递类名才能使其正常工作。
A
Amin Shojaei

通过多种方式在 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 返回到我的案例中执行的测试。
l
linktoahref

要使用 artisan 执行相同的操作,请运行:

php artisan test --filter ApplicationVersionFormatTest

在我的情况下,它适用于默认的 Feature 和 Unit 文件夹,但如果我创建一个新的测试套件,它就不起作用。
@Berni 确保您新添加的测试类以 Test 结尾,否则 PHPUnit 将无法识别它。
@Berni 确保将新的测试套件添加到您的 phpunit.xml 文件中。
O
Osman Rafi

对于较新的版本,这可能有效

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

按目录过滤呢?
C
Community

您可能可以使用 this answer 来管理相关问题。

只需使用 @group 注释标记类并使用 --group <group_name> 运行 PHPUnit

更新

您的 --filter 命令不完整。试试这个:phpunit --filter AppVersionTest "repositories\ApplicationVersionFormat.php"


B
Bhuvaneshwar Nagaraj

phpunit --filter <relative_path_to_file> 例如,要测试的文件是 test/repos/EloquentPushTest.phptest/repos/EloquentWebTest.php 用于测试 EloquentWebTest.php

使用phpunit --filter ./repos/ElqouentWebpush


j
joan16v

使用示例:

php phpunit-5.7.27.phar -c app/ "src/package/TestBundle/Tests/Controller/ExampleControllerTest.php"

E
Edham Rabuan

对于 laravel 8

php artisan test --filter ExampleTest

f
f_i

使用 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 的类将被执行。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅