我想确保我们通过使用正确的参数调用函数来启动 goroutine。
例如:
func MyTest(t *testing.T) {
service.EXPECT().MyMockFunc(1)
service.MyFunc()
}
func MyFunc() {
go MyMockFunc(1)
}
当我运行这个测试时,它失败了,因为(我相信)MyMockFunc
只在测试已经完成运行后才被调用。
有没有办法通过使用正确的参数调用函数来测试我是否启动了 goroutine?
注意:理想情况下,我希望按原样保留传递给 MyMockFunc
的参数(例如不添加 channel 参数)。
最佳答案
使用 channel 并假设您可以从测试中触发 goroutine:
package main
import (
"fmt"
"testing"
"time"
)
func MyMockFunc(n int) int {
fmt.Println("MyMockFunc is called")
time.Sleep(5 * time.Second)
return n + 1
}
func TestMyMockFunc(t *testing.T) {
result := make(chan int)
go func() {
result <- MyMockFunc(1)
}()
if <-result != 2 {
t.Fatalf("Expecting 2")
}
}
关于go - 如何测试在 goroutine 中调用了一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50538340/