我正在尝试为Go中的项目编写函数的单元测试,我遇到了一个我以前从未遇到过的问题。该函数用于监视Slack(消息传递平台)的循环,用于某些事件结构(由我正在使用的库定义)并根据返回的事件(使用开关)进行响应。这是(大部分)代码:
func botLoop(s *SlackBot) {
select {
case rtmEvent := <-s.Rtm.IncomingEvents:
switch ev := rtmEvent.Data.(type) {
case *slack.MessageEvent:
o, err := s.HandleCommand(ev)
if err != nil {
fmt.Printf("%s\n", err)
s.Say(ev.Channel, "%s\n", err)
break
}
s.Say(ev.Channel, o)
case *slack.LatencyReport:
fmt.Printf("Current latency: %v\n", ev.Value)
default:
// fmt.Printf("Unexpected: %v\n", msg.Data)
}
}
如何将“rtmEvents”传递到s.Rtm.IncomingEvent通道以触发我的代码以进行测试?有没有办法可靠地做到这一点?
Here's the documentation for the API library I'm using,如果这让事情变得更容易。
答案 0 :(得分:0)
我猜猜Slackbot是你的自定义类型。由于RTM是一种导出类型,因此您可以使用新的chan创建一个新的RTM结构。然后使用go例程开始向该频道发送消息。并在其他go例程中运行你的函数,这将调用消息。
此外,我建议您回复选择范围,因为您只收听一个陈