gpt4 book ai didi

testing - 如何在 Golang 中将数据发送到 channel 以进行测试?

转载 作者:数据小太阳 更新时间:2023-10-29 03:26:17 26 4
gpt4 key购买 nike

我正在尝试用 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 channel 以触发我的代码以进行测试?有什么方法可以可靠地做到这一点?

Here's the documentation for the API library I'm using ,如果这能让事情变得更容易的话。

最佳答案

我猜 Slackbot 是您的自定义类型。由于 RTM 是导出类型,为了进行测试,您可以创建一个带有新 channel 的新 RTM 结构。然后使用 go routine 开始向该 channel 发送消息。并在其他将监听消息的 go 例程中运行您的函数。

另外我建议回复 select with range 因为你只听一个 channel

关于testing - 如何在 Golang 中将数据发送到 channel 以进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40902084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com