phpUnit中的createMock和getMockBuilder有什么区别?

时间:2016-07-13 23:01:27

标签: php phpunit

对于我生命中的爱,我无法弄清楚createMock($type)getMockBuilder($type)

之间的区别

我正在查看原始文档,而且只有一个我不理解的内容。

  

...您可以使用getMockBuilder($ type)方法来自定义测试双生成   流畅的界面。

如果你能给我一个例子,我将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:36)

createMock($ type)在内部使用getMockBuilder()

protected function createMock($originalClassName)
{
    return $this->getMockBuilder($originalClassName)
                ->disableOriginalConstructor()
                ->disableOriginalClone()
                ->disableArgumentCloning()
                ->disallowMockingUnknownTypes()
                ->getMock();
}

因此,createMock()方法将返回一个使用一般最佳实践默认值构建的模拟。

但是使用 getMockBuilder($ type),您可以根据自己的要求创建模拟。

答案 1 :(得分:9)

从手册中 https://phpunit.de/manual/current/en/test-doubles.html

  

提供的createMock($ type)和getMockBuilder($ type)方法   PHPUnit可以在测试中用于自动生成一个对象   可以作为指定原始类型(界面或   班级名称)。此测试双重对象可用于每个上下文   预期或需要原始类型的对象。

     

createMock($ type)方法立即返回测试双精度对象   对于指定的类型(接口或类)。创建此测试   使用最佳实践默认值执行double(__construct()   并且原始类的__clone()方法没有被执行   传递给测试double的方法的参数不会被克隆。

     

如果这些默认值不是您所需要的,那么您可以使用    getMockBuilder($ type)方法来自定义测试双代   使用流畅的界面。

他们已经有很多关于堆栈溢出的答案,哪些是流畅的接口。