2

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

例如:

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

func MyFunc() {
    go MyMockFunc(1)
}

当我运行这个测试时,它失败了,因为(我相信)MyMockFunc只有在测试已经完成运行后才会被调用。

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

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

4

1 回答 1

0

使用通道并假设您可以从测试中触发 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")
    }
}
于 2018-05-26T04:52:35.283 回答