2016-12-01 14 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) 
    } 
} 

どのように私はテスト目的のために私のコードをトリガするs.Rtm.IncomingEventチャネルに「rtmEvents」を渡すことができます:ここ(のほとんど)は、コードがですか?確実にこれを行う方法はありますか?

Here's the documentation for the API library I'm usingこれがあれば、それは簡単です。

答えて

0

私はSlackbotがあなたのカスタムタイプだと思っています。 RTMはエクスポートされた型なので、テストのために新しいCHANを持つ新しいRTM構造体を作成できます。その後、goルーチンを使用して、そのチャネルにメッセージを送信し始めます。そして、メッセージを聞く他のルーチンにあなたの関数を実行してください。

また、ちょうど1つのチャンネルで聞いているので、範囲で選択することをお勧めします。

関連する問題