我正在使用 dockerclient https://github.com/samalba/dockerclient,它有一个基于通道的 API 来监听事件client.MonitorEvents()和一个方便的回调方法client.StartMonitorEvents(callbackHandler)。
我想测试处理程序是否被调用。当然,dockerclient 在 goroutine 中处理事件。
现在,我的处理程序只是吐出一个日志。如果我在考试中等待,一切都会得到处理。如果我不这样做,它会在处理任何事情之前退出:
func eventCallback(event *dockerclient.Event, ec chan error, args ...interface{}) {
log.Printf("Received event: %#v\n", *event)
}
我的测试似乎很简单:
func TestReceiveEvent(t *testing.T) {
createAndMonitorEvents(server.URL)
<- eventReady
eventWriter.Write([]byte(someEvent))
// test for something here
}
当然,除非我time.Sleep()因为goroutine而放入a ,否则它不起作用。
我如何告诉我的测试,“在运行测试之前等待其他例程完成它的工作”,而不是进入一些任意睡眠?我希望测试我的处理程序是否正确处理了该事件。
备用接口client.MonitorEvents()返回一个通道,这给了我更大的控制权,但是通道的接收会吐出无限nil事件。
慕的地6264312
弑天下
相关分类