Как запустить тест параллельно, требуя разные значения для переменных env - PullRequest
1 голос
/ 12 октября 2019

У меня есть приложение Go, где приложение читает переменные среды при загрузке. Приложение настраивает себя, используя значения переменных среды.

Теперь, в зависимости от значения одной из переменных env, приложение настраивается иначе, чем другое значение той же переменной env.

Я хочупроверить обе эти установки в моих модульных тестах. Я также хочу запустить эти тесты параллельно. Я могу установить значение переменной env, используя os.Setenv() в одном тесте, но это также повлияет на другой параллельный тест, который пытается установить другое значение для этой же переменной env.

Какова наилучшая практика в таких случаях? И как мы можем установить значения переменных env, которые не влияют на юнит-тесты.

1 Ответ

2 голосов
/ 12 октября 2019

Не используйте переменные среды при тестировании. Вместо этого передайте конфигурацию в проверенную функцию. Во время обычного запуска считайте эту конфигурацию из среды, но во время тестирования передайте ее напрямую. Пример:

Ваш код:

func main() {
    envFoo := os.Getenv("FOO")
    if err := someFunc(envFoo); err != nil {
        log.Fatal(err)
    }
}

func someFunc(confValue string) error {
    // do stuff
}

Ваш тест:

func TestSomeFunc(t *testing.T) {
    err := someFunc("test config value")
    // assert things
}
...