我正在针对以下课程编写测试:
abstract class EmailMessageRecipient
{
private $_address = null;
public function setAddress($address)
{
$this->_address = $address;
return $this;
}
public function getAddress()
{
return $this->_address;
}
}
测试如下:
class EmailMessageRecipientTest extends PHPUnit_Framework_TestCase
{
private $_test_object;
protected function makeTestObject()
{
return $this->createMock(EmailMessageRecipient::class);
}
public function setUp()
{
$this->_test_object = $this->makeTestObject();
}
public function testAddress()
{
$this->_test_object->setAddress('blah@example.com');
$this->assertEquals('blah@example.com', $this->_test_object->getAddress());
}
}
PHPUnit使用消息Failed asserting that null matches expected 'blah@example.com'.
使测试失败。因此$this->_test_object->getAddress()
正在返回null
而不是传递给它的电子邮件地址。为什么会发生这种情况,如何调整测试以使其通过。
模拟setAddress()
和getAddress()
方法不是一个可接受的答案。此测试的目的是涵盖setAddress()
和getAddress()
。
答案 0 :(得分:1)
如果您测试抽象类,则应使用:getMockForAbstractClass:
getMockForAbstractClass()方法返回一个模拟对象 抽象类。给定抽象类的所有抽象方法都是 嘲笑。这允许测试抽象的具体方法 类。
例9.19:测试抽象类的具体方法
<?php use PHPUnit\Framework\TestCase; abstract class AbstractClass { public function concreteMethod() { return $this->abstractMethod(); } public abstract function abstractMethod(); } class AbstractClassTest extends TestCase { public function testConcreteMethod() { $stub = $this->getMockForAbstractClass(AbstractClass::class); $stub->expects($this->any()) ->method('abstractMethod') ->will($this->returnValue(true)); $this->assertTrue($stub->concreteMethod()); } } ?>