繁体   English   中英

在goroutine中将Gock与HTTP调用一起使用时发生数据争夺

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM