什么是避免phpunit必须为模拟对象调用构造函数的方法?否则我需要一个模拟对象作为构造函数参数,另一个需要等等.api似乎是这样的:
getMock($className, $methods = array(), array $arguments = array(), $mockClassName = '', $callOriginalConstructor = TRUE, $callOriginalClone = TRUE, $callAutoload = TRUE)
我不懂它.它仍然抱怨构造函数参数,即使$callOriginalConstructor
设置为false.
我只在构造函数中有一个对象,它是一个依赖注入.所以我认为那里没有设计问题.
您可以使用getMockBuilder
而不仅仅是getMock
:
$mock = $this->getMockBuilder('class_name') ->disableOriginalConstructor() ->getMock();
参见节"测试双打"在PHPUnit的文档的详细信息.
虽然你可以这样做,但不需要这样做要好得多.您可以重构代码,而不是需要注入的具体类(使用构造函数),您只依赖于接口.这意味着您可以模拟或存根接口,而无需告诉PHPUnit修改构造函数行为.
干得好:
// 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);