为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 go 中模拟函数?

如何在 go 中模拟函数?

Go
三国纷争 2023-05-04 17:23:14
package mainimport (    "net/http"    "sync"    "time")type SessionInterface1 interface {    doLoginAndReadDestinations1() bool}type Session1 struct {    sessionCookie string    mux           sync.Mutex    sessionTime   time.Time    targetAddress string    currentJwt    string    transport     *http.Transport}var currentSession1 Session1func main() {    currentSession1.verifyLogin1()}func (s *Session1) doLoginAndReadDestinations1() bool {    ..logic...    ... for example return true}func callDest1(si SessionInterface1) bool {    return si.doLoginAndReadDestinations1()}func (s *Session1) verifyLogin1() bool {    return callDest1(s)}我想创建单元测试并模拟 doLoginAndReadDestinations1 我尝试为此方法创建接口并创建测试func test1(t *testing.T) {    type args struct {    }    tests := []struct {        name string        args args        want bool    }{{        name: "test",        args: args{},        want: false,    }}    for _, tt := range tests {        t.Run(tt.name, func(t *testing.T) {            var s1 *Session1            count := 10            s1 = &Session1{"", sync.Mutex{}, time.Now(), "", "", nil}            var got1 = s1.verifyLogin()            if got1 != tt.want {                t.Errorf("getJwt() = %v, want %v", got, tt.want)            }        })    }}我不知道如何在测试中更改函数 doLoginAndReadDestinations1 的逻辑并更改第一个 main 中的逻辑
查看完整描述

1 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

您将需要抽象出您想要模拟的所有内容。与其将依赖项解析为具体实现,不如使用接口。然后您将能够创建一个将实现此接口的模拟。

一般来说,我会建议你stretr/testify进行测试。它有以下方法:

  1. 断言

  2. 要求

  3. 嘲笑

  4. 套房

该库将帮助您构建测试、编写测试并删除样板代码。它内部有模拟机制


查看完整回答
反对 回复 2023-05-04
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信