如何在PHPUnit中对Mock对象send方法参数做实例、URL及请求方法校验?
如何在PHPUnit Mock中校验RequestInterface的URL和请求方法?
要实现对RequestInterface实例的多条件校验,你可以利用PHPUnit的callback()匹配器编写自定义断言逻辑,这样就能同时校验实例类型、请求方法和目标URL了。这里需要注意:标准PSR-7的RequestInterface并没有直接暴露url属性,通常是通过getUri()->toString()来获取完整请求URL的,所以我们会用这个方法来做校验。
修改后的代码如下:
$this->httpClient->expects($this->at(1)) ->method('send') ->with( $this->callback(function (RequestInterface $request) { // 1. 校验参数确实是RequestInterface实例(类型提示已隐含此校验,也可显式断言) $this->assertInstanceOf(RequestInterface::class, $request); // 2. 校验请求方法为GET $this->assertEquals('GET', $request->getMethod()); // 3. 校验请求URL为指定值 $this->assertEquals('https://some-domain.com', $request->getUri()->toString()); // 所有校验通过后返回true,告知PHPUnit匹配成功 return true; }) ) ->willReturn($responseMock);
代码说明:
$this->callback()允许你传入一个闭包,闭包会接收send方法的参数作为输入- 闭包内部可以添加任意PHPUnit断言来校验参数的各种属性和行为
- 最后必须返回
true,否则PHPUnit会判定参数不匹配
如果你的RequestInterface实现确实有直接的url属性(非标准情况),可以把$request->getUri()->toString()替换为$request->url即可。
内容的提问来源于stack exchange,提问作者Worp
相关产品推荐
相关产品推荐

