如何在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,提问作者アリ・ナディム
相关产品推荐
相关产品推荐

