我在使用Gock进行测试期间模拟了HTTP调用,除非我从单独的goroutine中运行HTTP调用(请考虑go Post("https://myapi.com", "this body"
),否则它运行良好。在这种情况下,我实际上并不关心HTTP响应,只是想触发请求。
这导致http.Client.send()
和gock.New()
之间的竞争状态。有没有解决的方法,或者在这种情况下建议的模拟API调用的方法是什么?
谢谢!
最佳答案
您可以将 TestMain
用于以下结构:
func setup() {
//Mock microservice
gock.New("...")
// JOB finished URI
// Mock: go Post("https://myapi.com", "this body")
gock.New("...")
// other setup
}
func cleanup() {
//Wait until all mock done/timeout
//Adjust as needed
timeoutSec := 10
for timeoutSec > 0 && gock.IsPending() {
time.Sleep(1 * time.Second)
timeoutSec--
}
}
func TestMain(m *testing.M) {
defer gock.Off()
setup()
ret := m.Run()
if ret == 0 {
cleanup()
}
os.Exit(ret)
}
func TestYourService(t *testing.T) {
//Perform testing:
// access microservice + job in separate goroutine
}