PHPUnit能否对包含对象的两个数组进行严格断言相等?
PHPUnit 实现对象数组的严格相等性测试(无需自定义比较器)
PHPUnit 原生支持在不使用自定义比较器的前提下,对对象数组进行严格的相等性验证,核心可以通过以下方式实现:
1. 使用 assertThat() 配合严格约束
通过 equalTo() 约束加上 strict() 修饰符,既能递归比较数组结构、对象属性,又会强制严格类型匹配(比如字符串'false'≠数字0,整数1≠字符串'1'),同时不需要对象是同一实例,只要属性的类型和值完全一致即可。
示例代码:
$this->assertThat($actualObjectArray, $this->equalTo($expectedObjectArray)->strict());
2. 注意 assertSame() 的适用场景
如果你需要的是完全同一引用的比较(比如数组里的对象必须是同一个实例,标量必须是同一内存地址的值),可以直接用 assertSame(),但它的限制更强:不同实例的对象哪怕属性完全一致,也会判定为不相等。如果你的需求只是值和类型的严格匹配而非引用一致,这种方法并不适用。
关键说明
strict()修饰符会强制所有层级的比较都遵循严格类型规则,完全符合你要求的'false' !== 0这类严格比较逻辑。- 该方式无需编写自定义比较器,完全依赖PHPUnit原生断言能力。
内容的提问来源于stack exchange,提问作者Capybarro
相关产品推荐
相关产品推荐

