如何在Golang中将数据发送到频道以进行测试?

时间:2016-12-01 03:20:59

标签: testing go switch-statement channels

我正在尝试为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,如果这让事情变得更容易。

1 个答案:

答案 0 :(得分:0)

我猜猜Slackbot是你的自定义类型。由于RTM是一种导出类型,因此您可以使用新的chan创建一个新的RTM结构。然后使用go例程开始向该频道发送消息。并在其他go例程中运行你的函数,这将调用消息。

此外,我建议您回复选择范围,因为您只收听一个陈