gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:54:05 25 4
gpt4 key购买 nike

使用 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. 避免使用构造函数(我使用反射设置 foo 属性)。

这段代码:

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

将失败并显示以下错误消息:

Argument 1 passed to MyClass::__construct() must be an instance of Foo, none given

如果我删除 enableProxyingToOriginalMethods(),则创建的 mock 没有错误,因此看起来当我启用代理时,尽管 disableOriginalConstructor() 仍会启用构造函数打电话。

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

最佳答案

如果代理到原始类,则必须实例化原始类的对象。如果原始类有构造函数,则必须执行该构造函数。因此 disableOriginalConstructor() 和 enableProxyingToOriginalMethods() 是互斥的。

欢迎在 https://github.com/sebastianbergmann/phpunit-mock-objects/issues 开票当这两者一起使用时要求 PHPUnit 发出错误。

关于php - 如何使用 Phpunit 代理原始方法并同时禁用构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26038980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com