Fork me on GitHub
a Sensio Labs Product

15 Keys Accelerate (v3.54.0) edition

Rule php_unit_no_expectation_annotation

Usages of @expectedException* annotations MUST be replaced by ->setExpectedException* methods.

Warning

Using this rule is risky

Risky when PHPUnit classes are overridden or not accessible, or when project has PHPUnit incompatibilities.

Configuration

target

Target version of PHPUnit.

Allowed values: '3.2', '4.3' and 'newest'

Default value: 'newest'

use_class_const

Use ::class notation.

Allowed types: bool

Default value: true

Examples

Example #1

Default configuration.

--- Original
+++ New
 <?php
 final class MyTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @expectedException FooException
-     * @expectedExceptionMessageRegExp /foo.*$/
-     * @expectedExceptionCode 123
      */
     function testAaa()
     {
+        $this->setExpectedExceptionRegExp(\FooException::class, '/foo.*$/', 123);
+
         aaa();
     }
 }

Example #2

With configuration: ['target' => '3.2'].

--- Original
+++ New
 <?php
 final class MyTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @expectedException FooException
-     * @expectedExceptionCode 123
      */
     function testBbb()
     {
+        $this->setExpectedException(\FooException::class, null, 123);
+
         bbb();
     }

     /**
      * @expectedException FooException
      * @expectedExceptionMessageRegExp /foo.*$/
      */
     function testCcc()
     {
         ccc();
     }
 }

Rule sets

The rule is part of the following rule sets:

References

The test class defines officially supported behaviour. Each test case is a part of our backward compatibility promise.