func(svc Service) Test(){
info, err := svc.GetInfo()
if err != nil{
return
}
// 拿到 info 做一些其他逻辑,并把 info 更新
// ....
// 再拿一次最新的 info
info, err := svc.GetInfo()
if err != nil{
return
}
}
抛开合不合理先不谈,我现在想实现第一次 GetInfo 不返回 error 而第二次 GetInfo 返回 error 应该如何实现? 主要是为了覆盖率。。。。
或者除了 monkey 在不改变现有代码的基础上可以实现吗?
1
frozenshadow 2021-01-14 09:26:34 +08:00 via Android
有接收者的方法比较麻烦,可以看看 supermonkey,用符号表的方式打 patch
|
2
XJohn 2021-01-14 09:45:59 +08:00 via iPhone
可以的,monkey 可以设置桩代码每次调用返回不同的值
|
3
js2854 2021-01-25 13:31:21 +08:00
使用 gomonkey: github.com/agiledragon/gomonkey
p := ApplyMethodSeq(svc, "GetInfo", []OutputCell{ {Values: Params{info, nil}}, // 第 1 次不返回 error {Values: Params{nil, errors.New("mock error")}}, // 第 2 次不返回 error }) defer p.Reset() |