Home » Php » php – how to test specific test class using phpunit in laravel

php – how to test specific test class using phpunit in laravel

Posted by: admin April 23, 2020 Leave a comment

Questions:

I want to test specific testClass in my project since there are a lot of test class that’s failure and I just want to test one Class at a time.

I’ve created the test Class in following folder \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));
  }
}

so I’ve tried this follwing command but none of this works :

  • phpunit "repositories\AppVersionTest". => Cannot open file “test/repositories/AppVersionTest.php”
  • phpunit "test\repositories\AppVersionTest". => Cannot open file “test/repositories/AppVersionTest.php”
  • phpunit --filter "repositories\AppVersionTest". => No tests executed!
  • phpunit --testsuite "repositories\AppVersionTest". => No tests executed!

any help? thanks

How to&Answers:

After trying several ways, I found out that I don’t need to include the folder to test the specific test class. This works for me it runs all the test on the class:

phpunit --filter ApplicationVersionFormatTest

I think it’s because my ApplicationVersionFormatTest extend The TestCase and return application instance which serves as the “glue” for all the components of Laravel.

Answer:

for run phpunit test in laravel by many ways ..

vendor/bin/phpunit --filter methodName className pathTofile.php

vendor/bin/phpunit --filter 'namespace\directoryName\className::methodName'

for test single class:

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' 

for test single method:

 vendor/bin/phpunit --filter testExample 
 vendor/bin/phpunit --filter 'Tests\Feature\UserTest::testExample'
 vendor/bin/phpunit --filter testExample UserTest tests/Feature/UserTest.php

for run tests from all class within namespace:

vendor/bin/phpunit --filter 'Tests\Feature'

for more way run test see more

Answer:

You can probably manage that with this answer to a related question.

Just mark the class with @group annotation and run PHPUnit with --group <group_name>

Update

Your command with --filter is not complete. Try this: phpunit --filter AppVersionTest "repositories\ApplicationVersionFormat.php"

Answer:

phpunit --filter <relative_path_to_file>
for example , files to test are,test/repos/EloquentPushTest.php,test/repos/EloquentWebTest.php
for testing EloquentWebTest.php

use phpunit --filter ./repos/ElqouentWebpush

Answer:

Example of use:

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

Answer:

Using phpunit.xml

the @group option can be used on classes and methods.

class A

/**
 * @group active
 * */
class ArrayShiftRightTest extends TestCase
{
}

class B

/**
 * @group inactive
 * */
class BinaryGapTest extends TestCase
{    
}

in phpunit.xml

<groups>
    <include>
        <group>active</group>
    </include>
    <exclude>
        <group>inactive</group>
    </exclude>
</groups>

the classes that belongs to group active will be executed.