Phpunit 如何完全控制MockObject';什么样的行为?

Phpunit 如何完全控制MockObject';什么样的行为?,phpunit,Phpunit,我需要创建一个PHPUnit测试双精度: 使用某些方法的原始实现 将一些其他方法代理到原始实现,但允许我监视它们 用具有固定返回值的NOP存根替换其他方法,不调用原始实现 我该怎么办? 在->getMockBuilder()->getMock(),->createMock(),->createPartialMock(),->createTestProxy(),和->getMockBuilder()->enableProxyingToOriginalMethods()->setProxyTar

我需要创建一个PHPUnit测试双精度:

  • 使用某些方法的原始实现
  • 将一些其他方法代理到原始实现,但允许我监视它们
  • 用具有固定返回值的NOP存根替换其他方法,不调用原始实现
我该怎么办?


->getMockBuilder()->getMock()
->createMock()
->createPartialMock()
->createTestProxy()
,和
->getMockBuilder()->enableProxyingToOriginalMethods()->setProxyTarget()
之间,我似乎最多能够满足上述三个要求中的两个,但并非所有这三个问题。

通过模拟链接解决:

受保护函数getMixedMock(
字符串$className,
数组$constructorArgs,
数组$stubMethods,
数组$proxyMethods
):数组
{
$stub=$this->getMockBuilder($className)
->setMethods($stubMethods)
->getMock();
$proxy=$this->getMockBuilder(本地::类)
->setConstructorArgs($constructorArgs)
->setMethods(数组\唯一(数组\合并($stubMethods,$proxyMethods)))
->enableProxyingToOriginalMethods()
->setProxyTarget($stub)//getMock();
返回[$stub,$proxy];
}
公共功能测试()
{
[$stub,$proxy]=$this->getMixedMock(
LocalFSAdapter::类,
["/"],
[“写”],
['has']
);
//应该使用$stub监视必须存根的方法
//必须代理的方法应使用$proxy进行监视
//使用$proxy进行测试
}

根据测试内容,可能需要创建不同的模拟