我正在用go编写一个测试,看起来像下面的示例,该示例随机通过或失败。
t1 := make(chan []byte)
t2 := make(chan []byte)
done := make(chan bool)
DoStuff(t1, t2, done)
out := [][]byte{}
L:
for {
select {
case d := <-t1:
out = append(out, d)
case d := <-t2:
out = append(out, d)
case <-done:
break L
}
}
t.Logf("%s", out)
if len(out) != expectedLength {
t.Fail()
}
日志显示,有时out
切片的末尾附加了空元素,可以是任何数字,这是非常随机的。发送方发送的是应该发送的内容,所以我认为这是因为for循环和select在读取分支后执行了分支。还可能值得一提的是,在将完成的通道写入其中时,通道会同时关闭。