要对一个类进行单元测试,我想创建一个SimpleXMLElement
对象的模拟。不幸的是,我无法弄清楚如何做到这一点。我通常会这样做:
class XmlTest extends PHPUnit_Framework_TestCase
{
public function testSimpleXmlMock()
{
$mock = $this
->getMockBuilder('SimpleXMLElement')
->disableOriginalConstructor()
->getMock();
$this->assertInstanceOf('SimpleXMLElement', $mock);
}
}
此公式适用于模拟其他类(例如DOMDocument
),但它不适用于SimpleXMLElement
。运行测试会产生以下错误:
1) XmlTest::testSimpleXmlMock
unserialize(): Node no longer exists
我正在使用PHPUnit 4.1.3。我在模拟构建器上尝试了各种选项组合,包括将XML字符串作为参数传递给构造函数,但无法找到有效的组合。
如何创建模拟SimpleXMLElement
对象?
答案 0 :(得分:2)
“SimpleXMLElement”类是“Traversable”接口的实现。您可以轻松地模拟它,依赖注入可以基于接口......它不是理想的解决方案,但它可以工作。
private function getMockSimpleXmlElement()
{
$mock = $this
->getMockBuilder('Traversable')
->getMock();
return $mock;
}
否则你应该创建一个包装你需要的“SimpleXMLElement”的类和功能的类......然后注入包装类。