Article in English can be found on dev.to/arxeiss/auto-reset-environment-variables-when-testing-in-go-5ec
Někdy nastanou situace, kdy pro jednotlivé testy je potřeba nastavit různé hodnoty do environment variables. A protože testy by po sobě měly vždy uklidit, aby neovlivnily jiné testy, je potřeba tyto hodnoty resetovat do výchozích hodnot. A je nutné to udělat manuálně.
Pomocná funkce t.Cleanup()
/ defer
Je vhodné si napsat pomocnou funkci, která proměnné nastaví a rovněž po skončení testů je resetuje do původních hodnot, nebo odstraní.
func envSetter(envs map[string]string) (closer func()) { originalEnvs := map[string]string{} for name, value := range envs { if originalValue, ok := os.LookupEnv(name); ok { originalEnvs[name] = originalValue } _ = os.Setenv(name, value) } return func() { for name := range envs { origValue, has := originalEnvs[name] if has { _ = os.Setenv(name, origValue) } else { _ = os.Unsetenv(name) }
} } }
Použití
Pro použití stačí zavolat pomocnou funkci a vrácený callback zavolat pomocí t.Cleanup()
v Go 1.14+ nebo defer
ve starších verzích. Tím se po skončení testu vše resetuje na původní hodnoty.
func TestFunctionWithEnvVars(t *testing.T) { closer := envSetter(map[string]string{ "MY_ENV_VARS": "with some value", "MY_ANOTHER_ENV_VARS": "again with some value", }) t.Cleanup(closer) // Pro Go 1.14+ // defer closer() // Do verze Go 1.14 // ... }
Vlastní zkušenosti s testováním a environment variables lze sdílet v komentářích
K tomuto článku již není možné přidávat další komentáře