Run or exclude certain tests in PHPUnit

Amit Merchant · December 7, 2020 ·

If you’re following the TDD (Test Driven Development) using PHPUnit, you probably stumbled upon a scenario where you would have in need to skip/take some of the tests.

For instance, there might be an integration test that is taking a long time to run. So, you don’t want to run that test every time you run the test suite. And you only want it to be run when you wish. How would you do it?

The @group annotation

Well, PHPUnit has a provision for kinds of scenarios. There’s a @group annotation available which you can use to tag certain tests to one or more groups. So, if you want to tag a test using @group annotation using a group named “skip”, you can do it like so.

<?php

namespace Tests\Feature;

class AuthenticationTest extends TestCase
{
    /**
     * @group skip
     */
    public function test_users_can_authenticate_using_the_login_screen()
    {
        
    }
}

You can apply the same group to as many tests that you want to keep in this group.

Exclude groups on running test suite

Once the tests are tagged with suitable groups, now is the time to exclude groups while running the test suite. You can do it by using the --exclude option and providing it the group name that you would like to be excluded like so.

$ vendor/bin/phpunit --exclude skip

Or if you’re using Laravel 7.x, you can use the artisan test command like so.

$ php artisan test --exclude skip

This will run all of the tests except the ones that are tagged under the “skip” group.

Run certain groups on running a test suite

On the contrary, you can only run certain groups using the --group option like so.

$ vendor/bin/phpunit --group skip

Or if you’re using Laravel 7.x, you can use the artisan test command like so.

$ php artisan test --group skip

This will only run tests that are tagged under the “skip” group. The rest of the tests would get ignored.

Hi there! I'm Amit. I write articles about all things web development. If you like what I write and want me to continue doing the same, I would like you buy me some coffees. I'd highly appreciate that. Cheers!