You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:41:44