繁体   English   中英

测试包含锁定的功能时,Go应用程序挂起

[英]Go app hangs when testing a function that contains a lock

这是我编写的将请求添加到请求队列的函数:

func (self *RequestQueue) addRequest(request *Request) {

    self.requestLock.Lock()
    self.queue[request.NormalizedUrl()] = request.ResponseChannel
    self.requestLock.Unlock()
}

这是它的测试之一:

func TestAddRequest(t *testing.T) {

    before := len(rq.queue)

    r := SampleRequests(1)[0]
    rq.addRequest(&r)

    if (len(rq.queue) - 1) != before {
        t.Errorf("Failed to add request to queue")
    }
}

当我运行此测试时,应用程序挂起。 如果我注释掉此测试,一切正常。 我认为问题在于函数内部的锁定。 我做错什么了吗? 谢谢你的帮助!

问题是SampleRequests()函数中的无限循环:

func SampleRequests(num int) []Request {

    requests := make([]Request, num, num+10)
    for i := 0; i < len(requests); i++ {
        r := NewRequest("GET", "http://api.openweathermap.org/data/2.5/weather", nil)
        r.Params.Set("lat", "35")
        r.Params.Add("lon", "139")
        r.Params.Add("units", "metric")

        requests = append(requests, r)
    }

    return requests
}

我被检查,如果i小于在for循环继续条件阵列的长度。 每次迭代都将一个项目添加到数组中,长度增加,并且for循环继续执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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