Skip to content

Commit

Permalink
Merge pull request #1157 from ghostwriter/bugfix/mock-static-return-t…
Browse files Browse the repository at this point in the history
…ypes

Mock methods with `static` return types
  • Loading branch information
davedevelopment committed Jan 11, 2022
2 parents 816475d + 66c767f commit a38a944
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 0 deletions.
3 changes: 3 additions & 0 deletions library/Mockery/Mock.php
Expand Up @@ -747,6 +747,9 @@ public function mockery_returnValueForMethod($name)
case 'void':
return null;

case 'static':
return $this;

case 'object':
$mock = \Mockery::mock();
if ($this->_mockery_ignoreMissingRecursive) {
Expand Down
32 changes: 32 additions & 0 deletions tests/Mockery/Fixtures/MethodWithStaticReturnType.php
@@ -0,0 +1,32 @@
<?php
/**
* Mockery
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://github.com/padraic/mockery/master/LICENSE
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to padraic@php.net so we can send you a copy immediately.
*
* @category Mockery
* @package Mockery
* @subpackage UnitTests
* @copyright Copyright (c) 2010 Pádraic Brady (http://blog.astrumfutura.com)
* @license http://github.com/padraic/mockery/blob/master/LICENSE New BSD License
*/

namespace test\Mockery\Fixtures;

if (\PHP_VERSION_ID >= 80000) {
class MethodWithStaticReturnType
{
public function returnType(): static
{
return $this;
}
}
}
41 changes: 41 additions & 0 deletions tests/Mockery/MockingMethodsWithStaticReturnTypeTest.php
@@ -0,0 +1,41 @@
<?php
/**
* Mockery
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://github.com/padraic/mockery/master/LICENSE
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to padraic@php.net so we can send you a copy immediately.
*
* @category Mockery
* @package Mockery
* @subpackage UnitTests
* @copyright Copyright (c) 2010 Pádraic Brady (http://blog.astrumfutura.com)
* @license http://github.com/padraic/mockery/blob/master/LICENSE New BSD License
*/

namespace test\Mockery;

use Mockery\Adapter\Phpunit\MockeryTestCase;
use test\Mockery\Fixtures\MethodWithStaticReturnType;

class MockingMethodsWithStaticReturnTypeTest extends MockeryTestCase
{
public function testMockingStaticReturnType()
{
if (\PHP_VERSION_ID < 80000) {
$this->markTestSkipped('Requires PHP >= 8');
}

$mock = mock(MethodWithStaticReturnType::class);

$mock->shouldReceive("returnType");

$this->assertSame($mock, $mock->returnType());
}
}

0 comments on commit a38a944

Please sign in to comment.