Tôi có một trường hợp kiểm tra hướng bảng như sau:
func CountWords(s string) map[string]int
func TestCountWords(t *testing.T) {
var tests = []struct {
input string
want map[string]int
}{
{"foo", map[string]int{"foo":1}},
{"foo bar foo", map[string]int{"foo":2,"bar":1}},
}
for i, c := range tests {
got := CountWords(c.input)
// TODO test whether c.want == got
}
}
Tôi có thể kiểm tra xem độ dài có giống nhau không và viết một vòng lặp để kiểm tra xem mọi cặp khóa-giá trị có giống nhau hay không. Nhưng sau đó tôi phải viết séc này một lần nữa khi tôi muốn sử dụng nó cho một loại bản đồ khác (giả sử map[string]string
).
Những gì tôi đã làm là, tôi đã chuyển đổi các bản đồ thành chuỗi và so sánh các chuỗi:
func checkAsStrings(a,b interface{}) bool {
return fmt.Sprintf("%v", a) != fmt.Sprintf("%v", b)
}
//...
if checkAsStrings(got, c.want) {
t.Errorf("Case #%v: Wanted: %v, got: %v", i, c.want, got)
}
Điều này giả định rằng các biểu diễn chuỗi của các bản đồ tương đương là giống nhau, điều này dường như đúng trong trường hợp này (nếu các khóa giống nhau thì chúng băm thành cùng một giá trị, vì vậy thứ tự của chúng sẽ giống nhau). Có cách nào tốt hơn để làm điều này? Cách thành ngữ để so sánh hai bản đồ trong các bài kiểm tra theo hướng bảng là gì?