Как проверить, что функция была вызвана в goroutine? - PullRequest
0 голосов
/ 26 мая 2018

Я бы хотел убедиться, что мы запускаем программу, вызывая функцию с правильными аргументами.

Например:

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

func MyFunc() {
    go MyMockFunc(1)
}

Когда я запускаю этот тест,это терпит неудачу, потому что (я считаю) MyMockFunc вызывается только после того, как тест уже завершен.

Есть ли способ проверить, что я запустил программу, вызвав функцию с правильными аргументами?

Примечание. В идеале я хотел бы сохранить аргументы, которые я передаю MyMockFunc, как есть (например, не добавлять аргумент канала).

1 Ответ

0 голосов
/ 26 мая 2018

Используя канал и предполагая, что вы можете запустить 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")
    }
}
...