PHPUnit测试和抽象类,其方法名为' Method'

时间:2016-02-10 03:44:06

标签: php unit-testing phpunit

我正在测试一个抽象类,它有一个名为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 Documentation我应该可以使用

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

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

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

另外,我没有选择将方法重命名为其他内容。

1 个答案:

答案 0 :(得分:2)

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

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

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'));
    }

}