在表驱动的测试中,断言两个映射的相等性至关重要。虽然自定义实现和字符串转换可能很麻烦,但 Golang 提供了内置解决方案。
reflect 包提供了 DeepEqual 函数,可以递归比较值(包括映射)。它检查:
import "reflect" eq := reflect.DeepEqual(m1, m2)
这种全面的比较确保准确的相等测试任何类型的映射(例如,map[string]bool、map[struct{}]interface{})。请注意,它需要接口类型作为参数。
reflect.DeepEqual 的 Map 案例的源代码揭示了:
if p, ok := v1.(reflect.Map); ok && q, ok := v2.(reflect.Map) { if p.Len() != q.Len() { return false } for _, k := range p.Keys() { if !q.Has(k) || !DeepEqual(p.Elem(k).Interface(), q.Elem(k).Interface()) { return false } } return true }
它验证 nil 值、map 长度和键值对。通过传递接口类型,确保与各种映射实现的兼容性。
在Golang中使用reflect.DeepEqual测试映射相等性是一种惯用且高效的解决方案。它可以处理所有边缘情况并确保对任何类型的地图进行准确比较。这简化了表驱动测试并增强了代码的可靠性。
以上是如何测试 Golang 中的映射的等价性?的详细内容。更多信息请关注PHP中文网其他相关文章!