【问题标题】:How can I mock a SimpleXMLElement object using PHPUnit?如何使用 PHPUnit 模拟 SimpleXMLElement 对象?
【发布时间】:2014-08-23 10:40:04
【问题描述】:

为了对一个类进行单元测试,我想创建一个 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 对象?

【问题讨论】:

    标签: php mocking phpunit simplexml


    【解决方案1】:

    “SimpleXMLElement”类是“Traversable”接口的实现。您可以轻松地对其进行模拟,并且可以基于接口进行依赖注入……这不是理想的解决方案,但可以。

    private function getMockSimpleXmlElement()
    {
        $mock = $this
            ->getMockBuilder('Traversable')
            ->getMock();
    
        return $mock;
    }
    

    否则你应该创建一个类来包装你需要的“SimpleXMLElement”的类和功能......然后注入包装类。

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 2012-05-05
      • 2011-03-09
      • 2021-10-31
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 2017-11-18
      相关资源
      最近更新 更多