Как проверить, что функция была вызвана в goroutine?

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

Например:

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

func MyFunc() {
    go MyMockFunc(1)
}

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

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

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

1 ответ

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