Make WordPress Core

Changeset 51567

08/07/2021 10:20:05 AM (3 years ago)

Build/Test Tools: Use the PHPUnit Polyfill TestCase as void workaround.

PHPUnit 8.0.0 introduced a void return type declaration to the "fixture" methods – setUpBeforeClass(), setUp(), tearDown() and tearDownAfterClass(). As the void return type was not introduced until PHP 7.1, this makes it more difficult to create cross-version compatible tests when using fixtures, due to signature mismatches.

The Yoast\PHPUnitPolyfills\TestCases\TestCase overcomes the signature mismatch by having two versions. The correct one will be loaded depending on the PHPUnit version being used.

When using this TestCase, if an individual test, or another TestCase which extends this TestCase, needs to overload any of the "fixture" methods, it should do so by using a snake_case variant of the original fixture method name, i.e. set_up_before_class(), set_up(), assert_pre_conditions(), assert_post_conditions(), tear_down(), and tear_down_after_class().

The snake_case methods will automatically be called by PHPUnit.

IMPORTANT: The snake_case methods should not call the PHPUnit parent, i.e. do not use parent::setUp() from within an overloaded set_up() method. If necessary, DO call parent::set_up().


This commit:

  • Lets the PHPUnit_Adapter_TestCase extend the Yoast\PHPUnitPolyfills\TestCases\TestCase, which makes this solution for the void return type available to the WordPress test suite.
  • Removes the individual import and trait use statements for the Polyfill traits. These are no longer necessary as the Yoast\PHPUnitPolyfills\TestCases\TestCase already includes those.

Follow-up to [51559-51566].

Props jrf, hellofromTonya, johnbillion, netweb, SergeyBiryukov.
See #46149.

2 edited


  • trunk/phpcs.xml.dist

    r51122 r51567  
    236236            <property name="custom_test_class_whitelist" type="array">
    237237                <!-- Test case parent classes. -->
     238                <element value="PHPUnit_Adapter_TestCase"/>
    238239                <element value="WP_UnitTestCase"/>
    239240                <element value="WP_Ajax_UnitTestCase"/>
    268269                <element value="SpeedTrapListener"/>
    269270                <element value="PHPUnit_Framework_Exception"/>
     271                <element value="Polyfill_TestCase"/>
    270272            </property>
    271273        </properties>
  • trunk/tests/phpunit/includes/phpunit-adapter-testcase.php

    r51561 r51567  
    3 use Yoast\PHPUnitPolyfills\Helpers\AssertAttributeHelper;
    4 use Yoast\PHPUnitPolyfills\Polyfills\AssertClosedResource;
    5 use Yoast\PHPUnitPolyfills\Polyfills\AssertEqualsSpecializations;
    6 use Yoast\PHPUnitPolyfills\Polyfills\AssertFileDirectory;
    7 use Yoast\PHPUnitPolyfills\Polyfills\AssertFileEqualsSpecializations;
    8 use Yoast\PHPUnitPolyfills\Polyfills\AssertionRenames;
    9 use Yoast\PHPUnitPolyfills\Polyfills\AssertIsType;
    10 use Yoast\PHPUnitPolyfills\Polyfills\AssertNumericType;
    11 use Yoast\PHPUnitPolyfills\Polyfills\AssertObjectEquals;
    12 use Yoast\PHPUnitPolyfills\Polyfills\AssertStringContains;
    13 use Yoast\PHPUnitPolyfills\Polyfills\EqualToSpecializations;
    14 use Yoast\PHPUnitPolyfills\Polyfills\ExpectException;
    15 use Yoast\PHPUnitPolyfills\Polyfills\ExpectExceptionMessageMatches;
    16 use Yoast\PHPUnitPolyfills\Polyfills\ExpectExceptionObject;
    17 use Yoast\PHPUnitPolyfills\Polyfills\ExpectPHPException;
     3use Yoast\PHPUnitPolyfills\TestCases\TestCase as Polyfill_TestCase;
    239 * for assertions and expectation methods added between PHPUnit 4.8 - 9.5.
    2410 *
     11 * Additionally, the Polyfill TestCase offers a workaround for the addition
     12 * of the `void` return type to PHPUnit fixture methods by providing
     13 * overloadable snake_case versions of the typical fixture method names and
     14 * ensuring that PHPUnit handles those correctly.
     15 *
    2516 * See {@link} for full
    26  * documentation on the available polyfills.
     17 * documentation on the available polyfills and other features.
    2718 */
    28 abstract class PHPUnit_Adapter_TestCase extends PHPUnit\Framework\TestCase {
    30     use AssertAttributeHelper;
    31     use AssertClosedResource;
    32     use AssertEqualsSpecializations;
    33     use AssertFileDirectory;
    34     use AssertFileEqualsSpecializations;
    35     use AssertionRenames;
    36     use AssertIsType;
    37     use AssertNumericType;
    38     use AssertObjectEquals;
    39     use AssertStringContains;
    40     use EqualToSpecializations;
    41     use ExpectException;
    42     use ExpectExceptionMessageMatches;
    43     use ExpectExceptionObject;
    44     use ExpectPHPException;
    45 }
     19abstract class PHPUnit_Adapter_TestCase extends Polyfill_TestCase {}
Note: See TracChangeset for help on using the changeset viewer.