我有以下phpunit mock:
$this->httpClient->expects($this->at(1))->method('send')
->with($this->isInstanceOf(RequestInterface::class))
->willReturn($responseMock);
所以"发送"的参数""正在检查的方法函数调用必须是RequestInterface的一个实例。但是我需要更详细地检查这个参数:
我该怎么做?
答案 0 :(得分:1)
您可以使用PHPUnit的callback constraint为您的断言添加自定义逻辑,例如
$this->httpClient
->expects($this->at(1))->method('send')
->with($this->callback(function (RequestInterface $request) {
$this->assertSame('https://some-domain.com', $request->getUri());
$this->assertSame('GET', $request->getMethod());
return true;
}))
->willReturn($responseMock);
如果传递的对象应该被认为是有效的,回调应该返回true,但是你也可以在其中使用本机断言(assertSame
等) - 它们抛出的任何异常都会冒泡到测试本身。这里的instanceof
检查由回调上的类型提示处理,因为如果它不匹配则会引发TypeError
。如果您愿意,也可以省略类型提示并手动运行assertInstanceOf
。
(注意:我已经假设你在这里使用了PSR-7 RequestInterface - 显然回调中的方法名称如果没有则需要更改。)