2016-12-01 50 views
0

我想在Go中寫一個項目的函數的單元測試,然後我遇到了一個我從未遇到過的問題。該函數用於監視Slack(消息傳遞平臺)的特定事件結構(由我正在使用的庫定義)的迴路中,並根據返回的事件(使用開關)進行響應。下面的代碼(大部分):如何在Golang中將數據發送到某個頻道進行測試?

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

我在猜Slackbot是你的自定義類型。由於RTM是導出類型,因此爲了測試您可以使用新的chan創建新的RTM結構。然後使用去例程開始發送消息到該頻道。並在其他去聽消息的去程序中運行你的函數。

此外,我建議您回答選擇與範圍,因爲你只有一個陳聆聽

相關問題