【发布时间】:2022-03-06 05:52:25
【问题描述】:
我正在尝试为我使用 gorilla/mux、gorm.io 和 golang-migrate/v4 制作的 REST API 应用程序创建集成测试
对于我正在使用的测试testify。
我的integration_Test.go中的SetupSuite()是这样的:
func (s *ReceiptServiceTestSuite) SetupSuite() {
s.Require().NoError(godotenv.Load("test.env"))
s.Require().NoError(database.Connect())
s.db = database.DB
s.m = database.M
router.HandleRequests()
}
而我的router.HandleRequests()是这样的:
func HandleRequests() {
router := mux.NewRouter()
router.Use(middleware)
// lots of router.HandleFunc()
http.ListenAndServe(":8080", router)
}
问题是:如果我从SetupSuite() 中删除router.HandleRequests(),我的所有数据库测试都会正常运行,但如果我尝试http.ListenAndServe(),则测试工作流程会停止并且没有任何反应。
我认为我应该将 goroutine 与 router.HandleRequests() 一起使用,以便它可以与测试并行运行,但我不知道该怎么做。
更多信息,这里是项目repository,我不知道它是否相关,但我正在使用docker-compose 运行两个postgres 实例,一个用于运行项目,另一个用于测试.
【问题讨论】:
-
在 test server 而不是 http.ListenAndServe 中运行根处理程序。