-2

我正在测试一个需要“登录”并获取存储在结构中并传递给我的函数的身份验证令牌的 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 或引用传递,因为这会破坏测试。我究竟做错了什么?

4

1 回答 1

0

一旦您启动 testGetUpdate,您正在寻找的那些值,如 TestMain 中所述,不存在用于通过此测试及其在测试中执行的函数调用。您最好模拟结构,放置一个常量,或者在另一个可以调用并设置这些变量的函数中为这些值执行另一个设置。常量可能是最简单的,特别是如果您要在其他测试中使用它。否则,您将不得不在每个测试中放置信息以传递结构的值。

另一种选择是在主测试函数中传递一个 t.run() ,这样应用程序就知道您想要在测试中运行什么值。

于 2020-12-01T21:41:39.193 回答