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 在不改变现有代码的基础上可以实现吗?
|  |      1frozenshadow      2021-01-14 09:26:34 +08:00 via Android 有接收者的方法比较麻烦,可以看看 supermonkey,用符号表的方式打 patch | 
|      2XJohn      2021-01-14 09:45:59 +08:00 via iPhone 可以的,monkey 可以设置桩代码每次调用返回不同的值 | 
|  |      3js2854      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() |