3 回答
TA贡献1817条经验 获得超6个赞
我认为当您使用nils 时MonitorEvents,您只会看到事件通道已关闭(包括 a的来源MonitorEventsclose(eventOrErrorChan),支持这一点)。evt, ok := <-c让您直接检查它是否(ok关闭时为假),并for evt := range c在关闭后停止。通常,从关闭的通道接收被指定为“在接收到任何先前发送的值之后[产生]元素类型的零值”
关于等待回调的问题:回调可以关闭一个通道。(或发送给它。)然后您的测试可以等待指定的时间长度select:
select {
case <-c:
/* ...success... */
case <-time.After(5 * time.Second):
/* timed out */
}
如果您知道某些错误条件导致处理程序无法完成或无法运行,则它可能会在不同的通道上发出这些情况的信号,或者通过向 发送不同的值c。
TA贡献1818条经验 获得超8个赞
“我如何告诉我的测试,“在运行测试之前等待其他例程完成它的工作”,而不是任意睡眠?”
您可以在频道上发送或关闭频道。调用者正在接收执行块,直到信号发生。我真的不明白如何将你的代码处理成有意义的东西......你不能在函数中分配停止通道,你必须将它传递给函数以便调用者可以监听它。就像这甚至如何编译?
func TestReceiveEvent(t *testing.T) {
createAndMonitorEvents(server.URL)
<- eventReady // undeclared variable, and discarding the event you recieved?
eventWriter.Write([]byte(someEvent)) //and another variable that is not declared
// test for something here
}
也许和想法会帮助你开始......
func createAndMonitorEvents(url string, done chan bool) {
//the codes
close(done)
}
func TestReceiveEvent(t *testing.T) {
eventReady := make(chan bool)
createAndMonitorEvents(server.URL, eventReady)
<- eventReady
eventWriter.Write([]byte(someEvent)) // dis still don't exist though
// test for something here
}
- 3 回答
- 0 关注
- 151 浏览
添加回答
举报