猿问

在 golang 中使用 json 编组测试深度相等性

鉴于这两个测试用例:


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)

这是 go playground 上的类似代码,因此您可以轻松对其进行破解。


慕姐4208626
浏览 243回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答