我的项目文件夹是这样的。它是一个大型 API,我仅出于组织目的而分离文件。
$ 树 src/backend/
src/backend/
├── cats
│ ├── cat_test.go
│ ├── handler.go
│ ├── routes.go
│ └── tools.go
├── cmd
│ ├── populate.go
│ ├── root.go
│ └── runserver.go
├── iot
│ └── device
│ ├── all.go
│ ├── all_test.go
│ ├── router.go
│ ├── types.go
│ └── update.go
├── main.go
├── main_test.go
└── root_test.go
在 main_test.go 上我启动 httptest 服务器
func TestMain(m *testing.M) {
setup()
exitVal := m.Run()
teardown()
os.Exit(exitVal)
}
func setup() {
flag.StringVar(&util.ServerFlag, "server", "s", "server to set request for")
flag.Parse()
viper.SetDefault("testing", true)
util.BasicStart()
iot.RunDependencies()
cats.SyncS3()
router := cmd.InitRootRouter()
util.SetTestServer(httptest.NewServer(router))
}
func teardown() {
log.Println("[TESTS] - Teardown completed")
}
当我运行 go test -v ./src/backend/...
时,root_test.go
上的所有测试都可以完美运行。但是 src/backend/cat_test.go 处的测试失败,因为在运行时已经调用了拆解方法。如何让服务器等待所有测试运行后再关闭?
最佳答案
每个包的测试都作为单独的二进制文件运行,因此无法在包之间共享安装和拆卸状态。如果您有一个复杂的设置或拆卸需要跨包共享,那么您可以在项目中创建一个测试包,它定义测试脚手架并从每个测试的 setup
和 teardown< 中调用它
.
关于testing - 为不同包上的所有测试运行单个 Golang httptest 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39681678/