phpunit避免了模拟的构造函数参数。

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

有什么方法可以避免phpunit不得不调用模拟对象的构造函数呢?否则,我将需要一个模拟对象作为构造函数参数,另一个用于此参数的对象。API似乎如下所示:

getMock($className, $methods = array(), array $arguments = array(),
        $mockClassName = '', $callOriginalConstructor = TRUE,
        $callOriginalClone = TRUE, $callAutoload = TRUE)

我不想让它起作用。它仍然抱怨构造函数参数,即使是$callOriginalConstructor设置为假。

构造函数中只有一个对象,它是依赖项注入。所以我觉得我在设计上没有问题。

提问于
用户回答回答于

给你:

    // Get a Mock Soap Client object to work with.
    $classToMock = 'SoapClient';
    $methodsToMock = array('__getFunctions');
    $mockConstructorParams = array('fake wsdl url', array());
    $mockClassName = 'MyMockSoapClient';
    $callMockConstructor = false;
    $mockSoapClient = $this->getMock($classToMock,
                                     $methodsToMock,
                                     $mockConstructorParams,
                                     $mockClassName,
                                     $callMockConstructor);
用户回答回答于

你可以用getMockBuilder而不是仅仅getMock:

$mock = $this->getMockBuilder('class_name')
    ->disableOriginalConstructor()
    ->getMock();

虽然你能做到,但最好不要这样做。您可以重构代码,所以不需要注入具体的类(带有构造函数),而只依赖于接口。这意味着可以模拟或存根接口,而不必告诉PHPUnit修改构造函数行为。

扫码关注云+社区