我正在使用PHPunit 8.3.5,我正在尝试检查方法是否获得了正确的参数。
示例代码:
$this->registry->get($thing)->apply(EXAMPLE::SUBMIT);
$this->registry->get($thing)->apply(EXAMPLE::CANCEL);
我有两个函数,functionA使用第一个示例行,functionB使用第二个示例行。我需要确保functionA使用SUBMIT而不是其他任何东西,对于Bs情况也是如此。
问题:
->method('apply')->with()
与回调一起使用,以测试是否可以正确输入willReturn
创建一个->method('get')->with()
来返回一个以apply
作为函数的简单类$registryMock = $this->createMock(Registry::class);
$registryMock->method('get')->willReturn(new class {
public function apply(){} // <-- I need to assert the input of this method
});
$registryMock->method('apply')->with(self::callback(function($order, $status){
return $status === EXAMPLE::SUBMIT;
}));
如何结合这两种方法?我也尝试过get->apply
,但这不是它。
请注意:不能重写实际代码。
答案 0 :(得分:1)
基于Dirk的评论:
您可以像通常那样首先在第二个函数中创建一个模拟。然后,您创建一个模拟,该模拟返回前一个模拟:
// first we create a mock for the last in the chain, here '->apply()'
$registryMockApply = $this->createMock(Registry::class);
$registryMockApply->expects(self::once())->method('apply')->with(
self::equalTo(EXAMPLE::SUBMIT),
);
// Then the one before that, here '->get()', which returns the previous mock
$registryMock = $this->createMock(Registry::class);
$registryMock->method('get')->willReturn($registryMockApply);
// Together resulting in '->get()->apply()'