我正在尝试测试是否在公共接口中调用了受保护的方法。
<?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
和测试这个。这是正确的方法吗?