首页  >  文章  >  后端开发  >  如何在 Go 中测试 Map 等价性?

如何在 Go 中测试 Map 等价性?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-13 09:46:02980浏览

How to Test Map Equivalence in Go?

在 Go 中测试映射等效性

在表驱动测试中,测试映射等效性的挑战出现了。手动检查长度和键值对变得乏味,尤其是在针对不同的地图类型重复检查时。

惯用解决方案

惯用解决方案利用 Go 标准库的 Reflect 包。 Reflect.DeepEqual 函数接受两个 interface{} 参数,并通过以下方式检查是否相等:

  1. 比较它们的 nil 值
  2. 比较它们的长度(对于映射等数据结构)
  3. 递归检查其组成元素(映射中的键值对)的相等性

示例

import "reflect"

func TestMapEquality(t *testing.T) {
    m1 := map[string]int{"foo": 1, "bar": 2}
    m2 := map[string]int{"foo": 1, "bar": 2}
    eq := reflect.DeepEqual(m1, m2)
    if !eq {
        t.Errorf("Maps not equal: %v", m1, m2)
    }
}

附加说明

  • reflect.DeepEqual 适用于任何有效的地图类型,使其成为通用解决方案。
  • 由于它接受 interface{} 参数,因此确保传递的值至关重要是真正的映射。
  • 函数的递归性质确保即使是嵌套的数据结构也能彻底比较是否相等。

以上是如何在 Go 中测试 Map 等价性?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn