PHPUnit 测试和抽象类,使用名为“Method”的方法


PHPUnit test and abstract class with a method named 'Method'

我正在测试一个抽象类,该类具有一个名为Method的方法。

这是我的抽象类(删节):

abstract class ClassToTest {
  function Method($_value = NULL) {
    // based on the value passed in a different value is returned.
  }
}

这是我的PHPUnit类:

class ClassToTestTest extends PHPUnit_Framework_TestCase {
  public $object = NULL;
  public function setUp() {
    $this->object = $this->getMockForAbstractClass('ClassToTest');
  }
  public function testMethod() {
    // passing no value should return NULL
    $this->assertNull($this->object->Method());
    // passing a value should return a value
    $this->assertEquals($this->object->Method($method), 'return_value');
  }
}

基于 PHPUnit 文档,我应该能够使用

$stub->expects($this->any())->method('Method')->willReturn('foo');

不知何故,但我无法弄清楚如何使这项工作。

如何使用 PHPUnit 测试名为 Method 的方法?

另外,我无法选择将该方法重命名为其他名称。

你正在测试的类肯定是唯一不应该嘲笑的类。如果您伪造了它的方法调用,您将不会真正测试它。

由于您的类是抽象的,因此您需要通过具体的实现对其进行测试。如果没有,请为测试创建它。

class MyClassToTest extends ClassToTest
{
    // implement abstract methods
}
class ClassToTestTest extends PHPUnit_Framework_TestCase
{
    private $object;
    protected function setUp()
    {
        $this->object = new MyClassToTest();
    }
    public function testMethod()
    {
        $this->assertSame('return_value', $this->object->Method('foo'));
    }

}