phpUnit中createMock和getMockBuilder有什么区别?

Chr*_*nds 20 php phpunit

为了爱我的生活,我无法弄清楚createMock($type)和之间的区别getMockBuilder($type)

我正在阅读原始文档,并且只有一个我不理解的衬垫.

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

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

Gau*_*Rai 42

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

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

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

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

  • 我已经使用 createMock 多年了,并且想知道为什么人们使用 getMockBuilder 来代替。好吧,我很确定他们的目的不是“使用流畅的界面自定义测试双生成”,感谢这个答案 (2认同)

Paw*_*iel 12

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

PHPUnit提供的createMock($ type)和getMockBuilder($ type)方法可以在测试中用于自动生成一个对象,该对象可以充当指定原始类型(接口或类名)的测试双精度.此测试双重对象可用于期望或需要原始类型的对象的每个上下文中.

所述createMock($型)方法立即返回对指定类型(接口或类)的测试双对象.使用最佳实践默认值(在__construct()和__clone()原始类不执行的方法进行该试验双重的创建和传递给测试double的方法的参数不会被克隆.

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

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