2 回答

TA贡献2041条经验 获得超4个赞
测试包,而不是文件!
由于您正在测试处理程序/端点,因此将所有_test文件放在处理程序或路由器包中是有意义的。(例如,每个端点/处理程序一个文件)。
另外,不要init()用于设置您的测试。该testing包指定了一个具有以下签名的函数:
func TestMain(m *testing.M)
生成的测试将调用 TestMain(m) 而不是直接运行测试。TestMain 运行在主 goroutine 中,并且可以围绕对 m.Run 的调用进行任何必要的设置和拆卸。然后它应该使用 m.Run 的结果调用 os.Exit
在 TestMain 函数中,您可以进行任何您需要的设置以运行您的测试。如果你有全局变量,这里就是声明和初始化它们的地方。您只需为每个包执行一次此操作,因此将TestMain代码放在单独的_test文件中是有意义的。例如:
package router
import (
"testing"
"net/http/httptest"
)
var (
testServer *httptest.Server
)
func TestMain(m *testing.M) {
// setup the test server
router := ConfigureRouter()
testServer = httptest.NewServer(router)
// run tests
os.Exit(m.Run())
}
最后用go test my/package/router.

TA贡献1784条经验 获得超7个赞
也许您可以将要从多个单元测试文件中使用的设置代码放入一个单独的包中,该包仅由单元测试使用?
或者您可以将设置代码放入普通包中,然后在单元测试中使用它。
之前有人问过,但 Go 作者选择不隐式提供测试标签,该标签可用于选择性地启用普通包文件中的函数编译。
- 2 回答
- 0 关注
- 195 浏览
添加回答
举报