Skip to content
Advertisement

How to use expectException in PHPUnit?

I’m trying to test my Exception, or any other exception in PHP Unit.

<?php declare(strict_types=1);


namespace TestsException;

use PHPUnitFrameworkTestCase;

class DrinkIsInvalidExceptionTest extends TestCase
{
    public function testIsExceptionThrown(): void
    {
        $this->expectException(Exception::class);
        try {
            throw new Exception('Wrong exception');
        } catch(Exception $exception) {
            echo $exception->getCode();
        }

    }

}

Still fails:

Failed asserting that exception of type "Exception" is thrown.

What could be the problem?

Advertisement

Answer

The problem is that the exception is never thrown because you are catching it in the catch block. The correct code to test your exception would be this:

class DrinkIsInvalidExceptionTest extends TestCase
{
    public function testIsExceptionThrown(): void
    {
        $this->expectException(Exception::class);
        $this->expectExceptionCode('the_expected_code');
        $this->expectExceptionMessage('Wrong exception');

        // Here the method that throws the exception
        throw new Exception('Wrong exception');
    }
}
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement