2
我有一個抽象基類的抽象保護方法嘲弄:嘲弄publicaly覆蓋保護的方法
abstract class AbstractSample
{
abstract protected function getConnection();
}
和子類的,其中保護法被重新定義爲公衆:
class ConcreteSample extends AbstractSample
{
public function getConnection()
{
return 'connection resource';
}
}
這是類我想測試:
class Caller
{
protected $_sample;
public function __construct(ConcreteSample $sample)
{
$this->_sample = $sample;
}
public function method()
{
$conn = $this->_sample->getConnection();
return $conn;
}
}
和測試單元本身:
class Sample_Test extends \PHPUnit_Framework_TestCase
{
public function test_getConnection()
{
$RESOURCE = 'mocked resource';
$mSample = \Mockery::mock(ConcreteSample::class);
$mSample
->shouldReceive('getConnection')->once()
->andReturn($RESOURCE);
$obj = new Caller($mSample);
$res = $obj->method();
$this->assertEquals($RESOURCE, $res);
}
}
當我運行測試我有一個錯誤:
InvalidArgumentException : getConnection() cannot be mocked as it a protected method and mocking protected methods is not allowed for this mock
/.../vendor/mockery/mockery/library/Mockery.php:670
/.../vendor/mockery/mockery/library/Mockery.php:678
/.../vendor/mockery/mockery/library/Mockery.php:629
/.../var/tmp/Sample_Test.php:13
我怎麼能嘲笑重新定義了保護方法在基類中的公共方法?嘲弄的版本是0.9.4
有一個在GitHub上帕德里克/嘲弄的[問題](https://github.com/padraic/mockery/issues/497) 。 –
dafuq? 「抽象保護功能」可以被「公共功能」覆蓋?我會拒絕這個拉請求... – iRaS
這是嘲笑中的錯誤,它在開發分支中得到了修復。最後一個版本是0.9.5,它受到影響。 –