Я начал работать с Go месяц назад. Я родом из java / kotlin, и мне хотелось бы понять, возможно ли добиться того же, что я делал на этих языках, даже в Go.
Моя текущая проблема заключается в следующем.
У меня есть набор интеграционных тестовых примеров, в которых мне нужно инициализировать некоторые вещи, а затем очистить ресурсы: я считаю, что это общий случай использования.
Вот некоторый псевдокод того, чего я хочу достичь, если возможно:
for each test {
init resources
run test {
init test resources
execute method under test
assert
}
clean resources
}
На данный момент, что я мог попробовать, был такой подход:
func TestMain(m *testing.M) {
setup()
code := m.Run()
shutdown()
os.Exit(code)
}
Что нормально, если не сказать, что он работает на уровне пакета. Это не дает мне большого контроля в данный момент, потому что я хотел бы запустить один из тех для тестовых файлов. (это то, что я заметил по крайней мере, пожалуйста, дайте мне знать, если я ошибаюсь)
В данный момент я в основном запускаю инициализацию для каждого теста, но это действительно много дублированного кода:
address, tearDownTestCase := testutils.SetupTestCase(emptyContext, postRouter(login.LoginUser), "/login")
defer tearDownTestCase()
// init test use case data
// run test
// clean use case data
Как вы думаете, есть лучший подход?