保護されたメソッドがパブリック インターフェイスで呼び出されるかどうかをテストしようとしています。
<?php
abstract class SomeClassAbstract
{
abstract public foo();
public function doStuff()
{
$this->_protectedMethod();
}
protected function _protectedMethod();
{
// implementation is irrelevant
}
}
<?php
class MyTest extends PHPUnit_Framework_TestCase
{
public function testCalled()
{
$mock = $this->getMockForAbstractClass('SomeClass');
$mock->expects($this->once())
->method('_protectedMethod');
$mock->doStuff();
}
}
私はそれが正しく呼び出されていることを知っていますが、PHPUnitは決して呼び出されないと言います.
メソッドが呼び出されない場合、他の方法でテストすると同じことが起こります。
<?php
abstract class AnotherClassAbstract
{
abstract public foo();
public function doAnotherStuff()
{
$this->_loadCache();
}
protected function _loadCache();
{
// implementation is irrelevant
}
}
<?php
class MyTest extends PHPUnit_Framework_TestCase
{
public function testCalled()
{
$mock = $this->getMockForAbstractClass('AnotherClass');
$mock->expects($this->once())
->method('_loadCache');
$mock->doAnotherStuff();
}
}
メソッドは呼び出されますが、PHPUnit はそうではないと言っています。
私が間違っていることは何ですか?
編集 私は自分のメソッドを二重コロンで宣言していませんでした。これは、それがパブリック メソッド (インターフェイス) であることを示すためだけでした。完全なクラス/メソッド宣言に更新されました。
編集 2 抽象クラスでいくつかのメソッドの実装をテストしていると言うべきでした (これを反映するようにコードを編集しました)。クラスをインスタンス化できないので、どうすればこれをテストできますか?
SomeClassSimple
代わりに、これを拡張SomeClassAbstract
してテストすることを考えています。それは正しいアプローチですか?