Установить данные в канале, который фактически устанавливается с помощью фиктивной функции для модульных тестов - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь написать модульные тесты для метода (метА), который делает вызов через hystrix.Go. Внешняя функция, которую я вызываю внутри Hystrix func () [somefunc], принимает канал в качестве параметра и вставляет данные в канал в фактический поток кода. Во время записи модулей я хочу поместить данные в канал и проверить все возможности. Возможно ли это?

func methA() {
    // some code
    channel := make(chan []string, 1)
    hystrix.Go("x", func() error {
        return A.somefunc(channel)
    }, nil)
    // some code which uses channel
}

1 Ответ

0 голосов
/ 09 октября 2019

Тестовый код, который использует канал? Может быть, вы можете попробовать смоделировать A.somefunc.

Пример:

func TestMethA(t testing.T) {
    // All possibilities
    cases := struct {
        data []interface{}  // data that send to channel
        want interface{}
    } {
        // ...
    }

    somefunc := A.somefunc
    defer func () {
        A.somefunc = somefunc
    }()

    for c := range cases {
        A.somefunc = func(c chan) error {
            // set data into the channel.
        }

        // call methodA
        methodA()
    }
}
...