# 1
Попытка запустить TestMain()
- это все равно, что попытаться запустить main()
.Вы этого не делаете, ОС делает это за вас.
TestMain был введен в Go 1.4 для помощи в настройке / разборке тестовой среды и вызывается вместо запуска тестов;цитируя примечания к выпуску:
Если код теста содержит функцию
func TestMain(m *testing.M)
, то эта функция будет вызываться вместо непосредственного запуска тестов.Структура M содержит методы для доступа и запуска тестов.
# 2
Используйте ioutil.TempDir()
для создания временных каталогов.
tmpDir, err := ioutil.TempDir("", "test_output")
if err != nil {
// handle err
}
Он позаботится о создании каталога.Позже вам следует использовать os.Remove(tmpDir)
для удаления временного каталога.
Вы можете использовать его вместе с слегка измененной версией предложения из Tim Peoples , примербудет:
func TestCompile(t *testing.T) {
tmpDir, err := ioutil.TempDir("", "testdata")
if err != nil {
t.Error(err)
}
defer os.Remove(tmpDir)
tests := []struct {
name, inFile, outFile string
err error
}{
{"OutputFileCreated", "correct.c", "correct_out", nil},
{"OutputFileNotCreatedForIncorrectSource", "wrong.c", "wrong_out", someErr},
}
for _, test := range tests {
var (
in = filepath.Join("testdata", test.inFile)
out = filepath.Join(tmpDir, test.outFile)
)
t.Run(test.name, func(t *testing.T) {
err = Compile(in, out)
if err != test.err {
t.Errorf("Compile(%q, %q) == %v; Wanted %v", in, out, err, test.err)
}
})
}
}