如何测试函数是否在 goroutine中被调用?



我想确保我们通过调用具有正确参数的函数来启动goroutine。

例如:

func MyTest(t *testing.T) {
service.EXPECT().MyMockFunc(1)
service.MyFunc()
}
func MyFunc() {
go MyMockFunc(1)
}

当我运行此测试时,它失败了,因为(我相信(只有在测试完成运行后才会调用MyMockFunc

有没有办法通过调用具有正确参数的函数来测试我是否启动了 goroutine?

注意:理想情况下,我想保持我传递给MyMockFunc的参数不变(例如,不添加通道参数(。

使用通道并假设您可以从测试中触发 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")
}
}

相关内容

  • 没有找到相关文章

最新更新