From fc8310466be6a823a237c2aabcc33229f7ee596e Mon Sep 17 00:00:00 2001 From: "nikola.trajkovic" Date: Sun, 23 Feb 2025 13:21:28 +0100 Subject: [PATCH 1/2] - support new version `phpunit/php-text-template` (^5); - support new version `phpunit/phpunit` (^12.0); - add attribute for each annotation to support phpunit 12; - use MockBuilder for building mocks instead of removed `getMockForAbstractClass` method --- composer.json | 4 ++-- tests/MockDelegateFunctionBuilderTest.php | 7 ++++++- tests/MockDelegateFunctionTest.php | 14 ++++++++++---- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/composer.json b/composer.json index 8213acd..ee11b60 100644 --- a/composer.json +++ b/composer.json @@ -23,10 +23,10 @@ "require": { "php": ">=5.6", "php-mock/php-mock": "^2.5", - "phpunit/php-text-template": "^1 || ^2 || ^3 || ^4" + "phpunit/php-text-template": "^1 || ^2 || ^3 || ^4 || ^5" }, "require-dev": { - "phpunit/phpunit": "^5.7.27 || ^6 || ^7 || ^8 || ^9 || ^10 || ^11" + "phpunit/phpunit": "^5.7.27 || ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12" }, "archive": { "exclude": ["/tests"] diff --git a/tests/MockDelegateFunctionBuilderTest.php b/tests/MockDelegateFunctionBuilderTest.php index 855a7dd..e905075 100644 --- a/tests/MockDelegateFunctionBuilderTest.php +++ b/tests/MockDelegateFunctionBuilderTest.php @@ -71,6 +71,9 @@ public function testSameSignaturesProduceSameClass() * * @doesNotPerformAssertions */ + #[\PHPUnit\Framework\Attributes\DoesNotPerformAssertions] + #[\PHPUnit\Framework\Attributes\DataProvider('provideTestBackupStaticAttributes')] + #[\PHPUnit\Framework\Attributes\BackupStaticProperties(true)] public function testBackupStaticAttributes() { $builder = new MockDelegateFunctionBuilder(); @@ -97,12 +100,14 @@ public static function provideTestBackupStaticAttributes() * * @doesNotPerformAssertions */ + #[\PHPUnit\Framework\Attributes\RunInSeparateProcess] + #[\PHPUnit\Framework\Attributes\DoesNotPerformAssertions] public function testDeserializationInNewProcess() { $builder = new MockDelegateFunctionBuilder(); $builder->build("min"); - $data = serialize($this->getMockForAbstractClass($builder->getFullyQualifiedClassName())); + $data = serialize($this->getMockBuilder($builder->getFullyQualifiedClassName())->getMock()); unserialize($data); } diff --git a/tests/MockDelegateFunctionTest.php b/tests/MockDelegateFunctionTest.php index ba3ab7b..f4d7bb7 100644 --- a/tests/MockDelegateFunctionTest.php +++ b/tests/MockDelegateFunctionTest.php @@ -35,10 +35,13 @@ protected function setUpCompat() * * @test */ + #[\PHPUnit\Framework\Attributes\Test] public function testDelegateReturnsMockResult() { $expected = 3; - $mock = $this->getMockForAbstractClass($this->className); + $mock = $this->getMockBuilder($this->className) + ->onlyMethods([MockDelegateFunctionBuilder::METHOD]) + ->getMock(); $mock->expects($this->once()) ->method(MockDelegateFunctionBuilder::METHOD) @@ -53,14 +56,17 @@ public function testDelegateReturnsMockResult() * * @test */ + #[\PHPUnit\Framework\Attributes\Test] public function testDelegateForwardsArguments() { - $mock = $this->getMockForAbstractClass($this->className); - + $mock = $this->getMockBuilder($this->className) + ->onlyMethods([MockDelegateFunctionBuilder::METHOD]) + ->getMock(); + $mock->expects($this->once()) ->method(MockDelegateFunctionBuilder::METHOD) ->with(1, 2); - + call_user_func($mock->getCallable(), 1, 2); } } From 7f08fbceb90dbaebbeb049eb24e1ed2b76a7e587 Mon Sep 17 00:00:00 2001 From: "nikola.trajkovic" Date: Mon, 24 Feb 2025 14:19:56 +0100 Subject: [PATCH 2/2] - `getMockForAbstractClass` is removed from PhpUnit 12, using `MockBuilder` as suggested alternative - use `MockBuilder::onlyMethods` on PhpUnit 8.3.0+ and `MockBuilder::setMethods` up to PhpUnit 8.3.0 --- tests/MockDelegateFunctionTest.php | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/tests/MockDelegateFunctionTest.php b/tests/MockDelegateFunctionTest.php index f4d7bb7..872d992 100644 --- a/tests/MockDelegateFunctionTest.php +++ b/tests/MockDelegateFunctionTest.php @@ -38,11 +38,18 @@ protected function setUpCompat() #[\PHPUnit\Framework\Attributes\Test] public function testDelegateReturnsMockResult() { - $expected = 3; - $mock = $this->getMockBuilder($this->className) - ->onlyMethods([MockDelegateFunctionBuilder::METHOD]) - ->getMock(); - + $expected = 3; + $mockBuilder = $this->getMockBuilder($this->className); + + // `setMethods` is gone from phpunit 10, alternative is `onlyMethods` + if (method_exists($mockBuilder, 'onlyMethods')) { + $mockBuilder->onlyMethods([MockDelegateFunctionBuilder::METHOD]); + } else { + $mockBuilder->setMethods([MockDelegateFunctionBuilder::METHOD]); + } + + $mock = $mockBuilder->getMock(); + $mock->expects($this->once()) ->method(MockDelegateFunctionBuilder::METHOD) ->willReturn($expected); @@ -59,9 +66,16 @@ public function testDelegateReturnsMockResult() #[\PHPUnit\Framework\Attributes\Test] public function testDelegateForwardsArguments() { - $mock = $this->getMockBuilder($this->className) - ->onlyMethods([MockDelegateFunctionBuilder::METHOD]) - ->getMock(); + $mockBuilder = $this->getMockBuilder($this->className); + + // `setMethods` is gone from phpunit 10, alternative is `onlyMethods` + if (method_exists($mockBuilder, 'onlyMethods')) { + $mockBuilder->onlyMethods([MockDelegateFunctionBuilder::METHOD]); + } else { + $mockBuilder->setMethods([MockDelegateFunctionBuilder::METHOD]); + } + + $mock = $mockBuilder->getMock(); $mock->expects($this->once()) ->method(MockDelegateFunctionBuilder::METHOD)