PHPUnit:模拟抽象类中的方法返回null
我正在编写针对以下类的测试:PHPUnit:模拟抽象类中的方法返回null,phpunit,Phpunit,我正在编写针对以下类的测试: abstract class EmailMessageRecipient { private $_address = null; public function setAddress($address) { $this->_address = $address; return $this; } public function getAddress() { ret
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断言null与预期匹配'blah@example.com'.. 因此,$this->\u test\u object->getAddress返回null,而不是传递给它的电子邮件地址。为什么会发生这种情况,以及如何调整测试以使其通过
模拟setAddress和getAddress方法是不可接受的答案。本测试的目的是涵盖setAddress和getAddress。如果您测试一个抽象类,您应该使用: 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());
}
}
?>