
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 年 1 月 14 日 via Android 有接收者的方法比较麻烦,可以看看 supermonkey,用符号表的方式打 patch |
2 XJohn 2021 年 1 月 14 日 via iPhone 可以的,monkey 可以设置桩代码每次调用返回不同的值 |
3 js2854 2021 年 1 月 25 日 使用 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() |