在测试函数中,有一种情况需要比较嵌套的切片。假设我有两个变量,如下所示:
want := [][]string{{"bat"},{"nat","tan"},{"ate","eat","tea"}}
got := [][]string{{"eat","tea","ate"},{"tan","nat"},{"bat"}}
怎么能拿它们来比较呢?
首先,我使用了错误的reflect.DeepEqual
,我还尝试了go-cmp
:
t.Run(tt.name, func(t *testing.T) {
opt := cmpopts.SortSlices(func (a, b []int) bool {
// not sure what to write
})
if got := groupAnagrams(tt.args.strs); !cmp.Equal(got, tt.want, opt) {
t.Errorf("groupAnagrams() = %v, want %v", got, tt.want)
}
})
2条答案
按热度按时间9nvpjoqh1#
排序内部切片:
排序外部切片:
其中sortOuter是一个函数:
比较:
https://go.dev/play/p/SjN8gLmotjd
bkhjykvo2#
您可以使用
sort.Slice
对内部切片进行排序,如下所示,并使用testifyassert.ElementsMatch
检查外部切片是否相等:元素匹配:
ElementsMatchAssert指定的listA(array,slice...)等于指定的listB(array,slice...),忽略元素的顺序。如果有重复的元素,则它们在两个列表中出现的次数应该匹配。
[1,3,2,3],[1,3,3,2]中的一个或多个元素。