1 回答
TA贡献2041条经验 获得超4个赞
json.Marshal当无法封送数据中的值时,该函数将失败。导致失败的唯一方法是引入一个用于测试的字段并在测试期间输入一个错误的值:
type DocData struct {
…
Test interface{} `json:"test,omitempty"`
}
…
var induceFailure interface{}
…
docData.Test = induceFailure
txBytes, err := json.Marshal(docData)
if err != nil {
return false, fmt.Errorf("failed docData bytes marshalling: %s", err.Error())
}
…
func TestMarshlFail(t *testing.T) {
induceFailure = make(chan struct{})
defer func() {
induceFailure= nil
}()
…
在该行代码上获得测试覆盖率可能不值得麻烦。
与手头的问题无关,这里有一些对您的代码的改进。
包装错误而不是将错误转换为字符串:
return nil, fmt.Errorf("failed docData unmarshalling: %w", err)
因为docData是指针,解组时不需要取值的地址。
err := json.Unmarshal(txData, docData)
- 1 回答
- 0 关注
- 73 浏览
添加回答
举报