2017-07-12 88 views
1
func good(json) string { 

    \\do something 
err = json.Unmarshal(body, &list) 
if err != nil { 
    panic(fmt.Sprintf("Unable to parse json %s",err)) 
} 

} 

func Testgood_PanicStatement(t *testing.T) { 
    Convey("And Invalid Json return error",t, func() { 
    actual := good("garbage json") 
    So(func() {},shoulPanic) 
    So(actual ,ShouldEqual,"") 
    } 
} 

成果如何測試Golang的恐慌?

第34行: - !無法解析JSON,{%E(字符串=無效字符 '{' 尋找對象關鍵字序列的開頭)%E(int64類型= 50)}

夠程8 [運行]:

問題:看來,當我路過垃圾JSON file.It的恐慌和不執行任何的陳述因此如何解決它像?

回答

2

使用recover()。

func Testgood_PanicStatement(t *testing.T) { 
    Convey("And Invalid Json return error",t, func() { 
    defer func() { 
     if r := recover(); r != nil { 
     So(func() {},shouldPanic) 
     So(actual ,ShouldEqual,"") 
     } 
    }() 
    actual := good("garbage json") 
    } 
} 

利爾更多:

  1. Golang blog
1

Upvoting的sadlil是正確的我想指出的答案,那恐慌的功能是不是好的做法。相反,將恐慌轉化爲INSIDE函數中的錯誤,並測試錯誤。

func good(json) (s string, err error) { 
    defer func() { 
    if r := recover(); r != nil { 
     err = fmt.Errorf("Error in good: %v", r) 
    } 
    }() 

    \\do something 
    err = json.Unmarshal(body, &list) 
    if err != nil { 
    # leaving the panic statement for demonstration. In this case 
    # you could just: return "", err 
    panic(fmt.Sprintf("Unable to parse json %s",err)) 
    } 

    return 
}