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

如何在PHPUnit中非严格断言数组的部分属性值?

在PHPUnit中断言数组包含指定部分属性值

针对你需要断言目标数组包含指定部分属性值的需求,有几种可行方案:

方案1:使用assertArraySubset(PHPUnit 8及以下版本原生支持)

PHPUnit 8及更早版本提供了assertArraySubset方法,直接满足你的需求——验证预期数组是目标数组的子集:

$this->assertArraySubset($expectedPropValue, $dataToBeTested);

注意:PHPUnit 9及以上版本移除了该原生方法,若使用高版本,可通过安装phpunit/phpunit-legacy-assertions扩展包来恢复此功能。

方案2:手动遍历断言键值对

如果不想依赖扩展或旧方法,可手动遍历预期数组的每个键值,逐一验证目标数组中对应键的取值是否匹配:

foreach ($expectedPropValue as $key => $value) {
    $this->assertArrayHasKey($key, $dataToBeTested);
    $this->assertEquals($value, $dataToBeTested[$key]);
}

这种方式更灵活,还能在断言失败时精准定位到具体不匹配的属性。

方案3:使用assertThat结合约束类

利用PHPUnit的约束系统,通过组合约束实现子集断言:

$this->assertThat(
    $dataToBeTested,
    $this->logicalAnd(
        $this->arrayHasKey('name'),
        $this->assertEquals('Johnny', $dataToBeTested['name']),
        $this->arrayHasKey('address'),
        $this->assertEquals('Somewhere', $dataToBeTested['address']),
        $this->arrayHasKey('age'),
        $this->assertEquals(21, $dataToBeTested['age'])
    )
);

内容的提问来源于stack exchange,提问作者アリ・ナディム

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:37:01