3 回答

TA貢獻1817條經(jīng)驗 獲得超6個贊
我認為當您使用nils 時MonitorEvents,您只會看到事件通道已關(guān)閉(包括 a的來源MonitorEventsclose(eventOrErrorChan),支持這一點)。evt, ok := <-c讓您直接檢查它是否(ok關(guān)閉時為假),并for evt := range c在關(guān)閉后停止。通常,從關(guān)閉的通道接收被指定為“在接收到任何先前發(fā)送的值之后[產(chǎn)生]元素類型的零值”
關(guān)于等待回調(diào)的問題:回調(diào)可以關(guān)閉一個通道。(或發(fā)送給它。)然后您的測試可以等待指定的時間長度select:
select {
case <-c:
/* ...success... */
case <-time.After(5 * time.Second):
/* timed out */
}
如果您知道某些錯誤條件導(dǎo)致處理程序無法完成或無法運行,則它可能會在不同的通道上發(fā)出這些情況的信號,或者通過向 發(fā)送不同的值c。

TA貢獻1818條經(jīng)驗 獲得超8個贊
“我如何告訴我的測試,“在運行測試之前等待其他例程完成它的工作”,而不是任意睡眠?”
您可以在頻道上發(fā)送或關(guān)閉頻道。調(diào)用者正在接收執(zhí)行塊,直到信號發(fā)生。我真的不明白如何將你的代碼處理成有意義的東西......你不能在函數(shù)中分配停止通道,你必須將它傳遞給函數(shù)以便調(diào)用者可以監(jiān)聽它。就像這甚至如何編譯?
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 關(guān)注
- 181 瀏覽
添加回答
舉報