gpt4 book ai didi

go - 如何在 go 中模拟函数?

转载 作者:数据小太阳 更新时间:2023-10-29 03:30:57 25 4
gpt4 key购买 nike

package main

import (
"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 Session1

func 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我尝试为此方法创建接口(interface)并创建测试

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 中的逻辑

最佳答案

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

一般来说,我会建议你stretchr/testify用于检测。它有以下方法:

  1. 断言
  2. 要求
  3. 模仿
  4. 套房

此库将帮助您构建测试、编写测试并删除样板代码。 它内部有模拟机制。在 testify mock section 阅读有关模拟接口(interface)的信息

关于go - 如何在 go 中模拟函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53089983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com