मेरे पास इस तरह एक टेबल-संचालित परीक्षण मामला है:
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
}
}
मैं जाँच सकता है कि क्या लंबाई समान है और एक लूप लिखें जो यह जांचता है कि क्या प्रत्येक कुंजी-मान जोड़ी समान है। लेकिन फिर मुझे इस चेक को फिर से लिखना होगा जब मैं इसे दूसरे प्रकार के नक्शे (कहना map[string]string
) के लिए उपयोग करना चाहता हूं ।
मैंने जो किया वह समाप्त कर दिया, मैंने नक्शे को तार में बदल दिया और तार की तुलना की:
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)
}
यह मानता है कि समतुल्य मानचित्रों के स्ट्रिंग निरूपण समान होते हैं, जो इस मामले में सही प्रतीत होते हैं (यदि कुंजियाँ समान हैं तो उनके पास समान मान है, इसलिए उनके आदेश समान होंगे)। क्या ऐसा करने के लिए इससे अच्छा तरीका है? टेबल-चालित परीक्षणों में दो मानचित्रों की तुलना करने के लिए मुहावरेदार तरीका क्या है?