鉴于这两个测试用例:
func TestEqualWhat(t *testing.T) { testMarshalUnmarshal(t,map[string]interface{}{"a":"b"}) testMarshalUnmarshal(t,map[string]interface{}{"a":5}) }
testMarshalUnmarshal帮助器只是对json进行编组并返回:
func testMarshalUnmarshal(t *testing.T,in map[string]interface{}) { //marshal the object to a string jsb,err := json.Marshal(in); if err != nil { log.Printf("Unable to marshal msg") t.FailNow() } //unmarshal to a map res := make(map[string]interface{}) if err := json.Unmarshal(jsb,&res); err != nil { t.FailNow() } if !reflect.DeepEqual(in,res) { log.Printf("\nExpected %#v\nbut got %#v",in,res) t.FailNow() } }
为什么第一个测试用例通过而第二个测试用例失败?测试的输出是这样的:
Expected map[string]interface {}{"a":5} but got map[string]interface {}{"a":5} --- FAIL: TestEqualWhat (0.00 seconds)
Here is similar code on the go playground所以你可以轻松搞定它.