testing - 为不同包上的所有测试运行单个 Golang httptest 服务器

标签 testing go

我的项目文件夹是这样的。它是一个大型 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 处的测试失败,因为在运行时已经调用了拆解方法。如何让服务器等待所有测试运行后再关闭?

最佳答案

每个包的测试都作为单独的二进制文件运行,因此无法在包之间共享安装和拆卸状态。如果您有一个复杂的设置或拆卸需要跨包共享,那么您可以在项目中创建一个测试包,它定义测试脚手架并从每个测试的 setupteardown< 中调用它.

关于testing - 为不同包上的所有测试运行单个 Golang httptest 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39681678/

相关文章:

go - 如何使用反射将值设置为包含 nil 的指针

java - 我如何在junit 中使用jdepend 的JavaPackage.containsCycle() 来检测我的包是否处于包周期中?

ruby-on-rails - 在Ruby中使用fakeweb或webmock模拟RestClient::GatewayTimeout?

azure - 在摘要页面上显示 Azure Devops Pipeline 测试成功百分比

linux - ngrok 如何在防火墙后工作?

string - 如何检测何时无法在 Go 中将字节转换为字符串?

go - 在 Goland 中安装库的快捷方式

c# - 我如何对这个自定义 commandlet 进行单元测试

javascript - 在 Chrome 中捕获 JS 错误

go - golang 中是否有惯用的作用域语义?