【问题标题】:PHPUnit method invocation assertion failing for abstract class抽象类的 PHPUnit 方法调用断言失败
【发布时间】:2014-05-02 00:19:35
【问题描述】:

我正在模拟一个抽象类,并使用expects 来验证特定方法是否被调用了两次,并带有一些特定的值。这个断言失败了,即使生产代码是正确的。这是我使用getMockForAbstractClass 方法创建模拟的时候。现在,当我创建这个抽象类的具体派生并将其输入getMock 时,它确实有效。然而,这种方法并不好,所以我想知道我是否可以避免它。

第一次尝试,使用无效的getMockForAbstractClasshttp://pastebin.com/09n92Q6h

第二次尝试,使用具体派生,确实有效:http://pastebin.com/SxxgN5Cw

【问题讨论】:

    标签: php unit-testing mocking phpunit abstract-class


    【解决方案1】:

    ocramius 的帮助下,我发现抽象类的具体方法默认不会被模拟出来。需要在getMockForAbstractClass中指定需要mock的具体方法。

    private function getMockedAbstractClass($className, array $methods)
    {
        return $this->getMockForAbstractClass(
            $className,
            array(),
            '',
            true,
            true,
            true,
            $methods
        );
    }
    

    为此使用模拟构建器界面会更好:

        $platform = $this->getMockBuilder($className)
            ->setMethods($methods)
            ->getMockForAbstractClass();
    

    完整的解决方案可以在这里看到:https://github.com/doctrine/dbal/pull/586/files

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 2013-10-01
      相关资源
      最近更新 更多