如何用Phpunit代理到原始方法并同时禁用构造函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Phpunit代理到原始方法并同时禁用构造函数?相关的知识,希望对你有一定的参考价值。

使用phpunit 4.5.2,我试图模拟以下类。

class Foo 
    public function bar() 


class MyClass

    private $foo;

    public function __construct(Foo $foo) 
        $this->foo = $foo;
        //some other stuff that I want to suppress during the unit tests.
    

    public function doSomething() 
        $this->foo->bar();
    

我希望实现以下目标:

  1. 让模拟类调用原始方法。
  2. 避免使用构造函数(我在设置了 属性使用反射)。)

这段代码。

$mock = $this->getMockBuilder('MyClass')
             ->disableOriginalConstructor()
             ->enableProxyingToOriginalMethods()
             ->getMock()

将会失败,出现以下错误信息:

传递给MyClass::__construct()的Argument 1必须是Foo的实例,而没有给出任何实例。

如果我去掉 启用ProxyingToOriginalMethods()因此,当我启用代理时,似乎尽管有了 disableOriginalConstructor() 调用。

如何在禁用构造函数的同时启用代理?

答案

如果你代理了原始类,那么必须实例化原始类的一个对象,如果原始类有一个构造函数,那么这个构造函数必须被执行。如果原始类有一个构造函数,那么这个构造函数必须被执行。因此disableOriginalConstructor()和enableProxyingToOriginalMethods()是相互排斥的。

欢迎在以下地址开票 https:/github.comsebastianbergmannphpunit-mock-objectsissues。 当这两者一起使用时,要求 PHPUnit 发出一个错误。

以上是关于如何用Phpunit代理到原始方法并同时禁用构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何用 phpunit 模拟 Laravel Eloquent 模型?

如何用批处理提取一目录下所有文本文件中的特定字符并同文件名一起输出?

如何用Python处理小程序功能

如何用颤振解决代理设置问题?

如何用CMD命令停止,启用,禁用某服务

在构造 std::variant 时禁用从指针类型到 bool 的隐式转换的最佳方法是啥?