WordPress.org

Make WordPress Core

Changeset 51567


Ignore:
Timestamp:
08/07/2021 10:20:05 AM (4 months ago)
Author:
SergeyBiryukov
Message:

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().

Reference: https://github.com/Yoast/PHPUnit-Polyfills#testcases

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.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • 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  
    11<?php
    22
    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;
    184
    195/**
     
    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 https://github.com/Yoast/PHPUnit-Polyfills} 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 {
    29 
    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.