当前位置:  开发笔记 > 编程语言 > 正文

phpunit避免使用mock的构造函数参数

如何解决《phpunit避免使用mock的构造函数参数》经验,为你挑选了2个好方法。

什么是避免phpunit必须为模拟对象调用构造函数的方法?否则我需要一个模拟对象作为构造函数参数,另一个需要等等.api似乎是这样的:

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

我不懂它.它仍然抱怨构造函数参数,即使$callOriginalConstructor设置为false.

我只在构造函数中有一个对象,它是一个依赖注入.所以我认为那里没有设计问题.



1> dave1010..:

您可以使用getMockBuilder而不仅仅是getMock:

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

参见节"测试双打"在PHPUnit的文档的详细信息.

虽然你可以这样做,但不需要这样做要好得多.您可以重构代码,而不是需要注入的具体类(使用构造函数),您只依赖于接口.这意味着您可以模拟或存根接口,而无需告诉PHPUnit修改构造函数行为.



2> Matthew Purd..:

干得好:

    // 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);

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有