我正在测试一个需要“登录”并获取存储在结构中并传递给我的函数的身份验证令牌的 API。我正在尝试编写一个“_test.go”文件,但 Auth Token 没有传递给测试函数,我不知道为什么。所有在线示例测试文件都非常简单,我找不到任何与我在这里尝试做的示例相近的示例——但话又说回来,这可能是我今天的 Google Foo 很弱..
这是代码:
package myapi
import (
"flag"
"fmt"
"os"
"testing"
)
// The Global var that needs to be read/write-able from all the testing func's
var d Device
func TestMain(m *testing.M) {
// --- Log into our test device ---
d.Address = os.Getenv("THEIP")
d.Username = "admin"
d.Password = "password"
d, err := d.Login()
if err != nil {
panic(err)
}
if d.Token == "" {
panic("Auth Token Missing")
}
// --- Run the Tests ---
flag.Parse()
ex := m.Run()
// --- Log off the test device ---
d, err = d.Logoff()
if err != nil {
panic(err)
}
// --- End the Tests ---
os.Exit(ex)
}
func TestGetUpdate(t *testing.T) {
f, err := d.GetUpdate()
if err != nil {
t.Error(err)
}
fmt.Println(f)
}
'd' 结构包含我进行 API 调用所需的所有信息,我在想将它声明为全局,它将可供所有测试函数使用,但是当我总是得到“Auth Token Missing”错误时调用我的 API 函数:
$ export THEIP="10.1.1.3"; go test -v
=== RUN TestGetUpdate
--- FAIL: TestGetUpdate (0.00s)
api_system_test.go:46: No Auth Token! You must Login() before calling other API calls
FAIL
exit status 1
FAIL a10/axapi 0.015s
Auth Token 的测试在 TestMain() 中通过,但结构的更新似乎没有出现。我不能将结构作为 var 或引用传递,因为这会破坏测试。我究竟做错了什么?