[英]Data race when using Gock with HTTP calls in goroutine
我在使用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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.