Метод testing.T.Setenv
Метод Setenv объекта testing.T устанавливает значение переменной окружения для текущего теста. В первый параметр передается имя переменной, во второй - новое значение. После завершения теста исходное значение переменной автоматически восстанавливается.
Метод гарантирует, что изменение переменной окружения не повлияет на другие тесты, выполняющиеся параллельно. Если переменная уже была установлена, ее значение будет сохранено и восстановлено после завершения теста.
Синтаксис
t.Setenv(key, value)
где key - имя переменной окружения (строка), value - новое значение (строка).
Пример
Давайте установим переменную окружения в тесте и проверим ее значение:
package main
import (
"fmt"
"os"
"testing"
)
func TestSetenv(t *testing.T) {
t.Setenv("TEST_VAR", "test_value")
value := os.Getenv("TEST_VAR")
fmt.Println(value)
}
Результат выполнения кода:
"test_value"
Пример
Метод Setenv автоматически восстанавливает исходное значение переменной после завершения теста. Рассмотрим это на примере:
package main
import (
"fmt"
"os"
"testing"
)
func TestSetenvRestore(t *testing.T) {
original := os.Getenv("TEST_VAR")
fmt.Printf("before: %s", original)
t.Setenv("TEST_VAR", "new_value")
fmt.Printf(" during: %s", os.Getenv("TEST_VAR"))
t.Cleanup(func() {
restored := os.Getenv("TEST_VAR")
fmt.Printf(" after: %s", restored)
})
}
Результат выполнения кода:
"before: during: new_value after: "
В этом примере видно, что после завершения теста переменная восстанавливается до исходного значения (в примере исходное значение было пустой строкой).
Пример
Метод Setenv безопасно работает с параллельными тестами. Установка переменной в одном тесте не влияет на другие тесты:
package main
import (
"fmt"
"os"
"testing"
)
func TestParallelSetenv(t *testing.T) {
t.Parallel()
t.Setenv("PARALLEL_VAR", "parallel_value")
value := os.Getenv("PARALLEL_VAR")
fmt.Printf("test parallel: %s", value)
}
func TestAnotherParallel(t *testing.T) {
t.Parallel()
value := os.Getenv("PARALLEL_VAR")
fmt.Printf("another test: %s", value)
}
Результат выполнения кода:
"test parallel: parallel_valueanother test: "
Как видно из примера, параллельный тест не видит переменную, установленную в другом тесте, что обеспечивает изоляцию тестов друг от друга.
Смотрите также
-
метод
testing.T.TempDir,
который создает временную директорию для теста с автоматической очисткой -
метод
testing.T.Cleanup,
который регистрирует функции для выполнения после завершения теста -
метод
testing.T.Parallel,
который указывает, что тест может выполняться параллельно с другими тестами -
метод
testing.T.Run,
который запускает подтест с собственным контекстом