여기 계시다면, PHPUnit 8+에서는 void
반환 유형 선언을 갖기 위해 setUp()
또는 tearDown()
과 같은 일반적인 템플릿 메소드가 필요하며, 이 메소드는 자연스럽게 PHP 7.1 이하의 모든 것을 깨뜨리게 된다는 점을 잘 알고 계실 것입니다.
PHP-CS-Fixer 또는 Rector 등의 도움을 받아 이러한 반환 유형 선언을 사용하도록 코드를 자동으로 업데이트하는 것은 큰 문제가 아니지만, 불행한(그러나 수익성이 있는) 이유로 인해 문제가 될 수 있습니다. , 귀하의 코드가 PHP 7.0 또는 PHP 5.6에서 작동하는지 확인해야 하며, 동시에 최신 버전의 PHPUnit에서 최상의 환경을 제공할 수 있습니다.
이 경우 두 가지 문제가 발생합니다. 하나는 최신 버전의 PHPUnit에는 오래된 어설션이 없지만 이 문제를 해결할 수 있는 방법을 찾을 수 있으며, 언급한 것처럼 최신 버전의 PHPUnit에서는 편리한 템플릿 메서드를 위해 void
반환 유형 선언이 필요하며 다시 작성하기 때문에 멈춥니다. 이러한 템플릿 방법 없이 작동하는 테스트는 큰 고통이며 불가능할 수도 있습니다. 그러면 이 작은 도서관이 여러분의 하루를 구원해 줄 것입니다!
composer require --dev sanmai/phpunit-legacy-adapter:"^6.4 || ^8.2.1"
먼저 PHPUnitFrameworkTestCase
대신 LegacyPHPUnitTestCase
에서 확장하도록 테스트를 업데이트합니다.
- class MyTest extends PHPUnitFrameworkTestCase
+ class MyTest extends LegacyPHPUnitTestCase
그런 다음 setUp(): void
템플릿 메소드를 사용해야 하는 경우 doSetUp()
메소드를 사용하여 이전 버전과 완전히 호환되는 방식으로 모든 반환 유형을 생략합니다.
- protected function setUp(): void
+ protected function doSetUp()
대부분의 다른 템플릿 방법에 대한 유사한 대체 방법이 있습니다.
- public static function setUpBeforeClass(): void
+ public static function doSetUpBeforeClass()
- public static function tearDownAfterClass(): void
+ public static function doTearDownAfterClass()
- protected function setUp(): void
+ protected function doSetUp()
- protected function tearDown(): void
+ protected function doTearDown()
- protected function assertPreConditions(): void
+ protected function doAssertPreConditions()
- protected function assertPostConditions(): void
+ protected function doAssertPostConditions()
방법 | 대사 |
---|---|
setUpBeforeClass(): void | doSetUpBeforeClass() |
tearDownAfterClass(): void | doTearDownAfterClass() |
setUp(): void | doSetUp() |
tearDown(): void | doTearDown() |
assertPreConditions(): void | doAssertPreConditions() |
assertPostConditions(): void | doAssertPostConditions() |
향후 버전도 동일한 패턴을 따를 가능성이 높습니다.
이 라이브러리는 문제의 가장 성가신 부분을 해결하지만 라이브러리가 다루지 않도록 설계된 다른 부분도 있습니다. 예를 들어:
assertContains
문자열과 함께 사용할 수 있지만 다른 버전에서는 그렇지 않습니다.expectExceptionMessageRegExp
라고 불리는 반면, 다른 버전에서는 동일한 메소드가 expectExceptionMessageMatches
라고 불립니다.이러한 변경된 메서드에 대한 폴리필이 있지만(아래 참조) 필요한 메서드에 대해서만 임시 폴리필을 작성하는 것은 큰 문제가 아닙니다. 예:
public function __call ( $ method , $ args )
{
if ( $ method === ' assertStringContainsString ' ) {
$ this -> assertContains (... $ args );
}
if ( $ method === ' assertIsBool ' ) {
$ this -> assertTrue ( is_bool ( $ args [ 0 ]));
}
if ( $ method === ' expectExceptionMessageRegExp ' ) {
$ this -> expectExceptionMessageMatches (... $ args );
}
throw new InvalidArgumentException ();
}
이에 대한 다중 버전 폴리필과 기타 방법이 여러 개 있는 경우:
yoast/phpunit-polyfills
가 있습니다.phpunitgoodpractices/polyfill
이 있습니다.