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 回答
- 0 关注
- 94 浏览
添加回答
举报
0/150
提交
取消