我正在为使用golang开发的功能编写单元测试。 这是代码片段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | func myFunc () { //there is some code err := json.Unmarshal (a, &b) if err != nil { //handle error } //there is some more code err := json.Unmarshal (c, &d) if err != nil { //handle error } } |
现在,我想模拟第一个解组返回成功,第二个解组返回失败。 在python中,我看到了一个类似的帖子:
Python模拟多个返回值
但是我找不到一个适合golang的人。 谁能帮我这个忙。
-
不幸的是,这在Golang中并不是那么简单。 最好的选择是重构函数,以便可以强制使
json.Unmarshal 返回错误,例如 当调用json.Unmarshal(a, &b) 并且a不是json格式时。
在这种情况下,我要做的是导出一个包变量
1 2 3 4 5 | var Unmarshaller func(data []byte, v interface{}) error; func init() { Unmarshaller = json.Unmarshal } |
然后,当您想强加一个错误时,您可以
1 2 3 | mypackage.Unmarshaller = func(data[] byte, v interface{}) error { return errors.New("It broke!") } |
然后,在代码中,而不是直接调用
1 | err =: json.Unmarshal(jsonBytes, &test) |
会成为
1 | err =: Unmarshaller(jsonBytes, &test) |
简短示例:https://play.golang.org/p/CinLmprtp5