Настройка теста и отрыв для каждого теста в режиме go
Я использую пакет "тестирования". Выполнение моих тестов, как показано ниже.
func TestMain(m *testing.M) {
...
// Setup
os.Exit(m.Run())
// Teardown
}
Это запустит настройку перед запуском любого теста и завершение после завершения всех тестов. И мне это нужно, поскольку настройка устанавливает БД. Но также, мне нужно, и еще, чтобы узнать, как запустить настройку/отключение при каждом тестировании. Для модульных тестов я запускаю, я хотел бы очистить БД перед каждым тестом, так что нет никаких проблем с содержимым БД, вызывающим неожиданное поведение.
Ответы
Ответ 1
Как показано в статье " Установка и отключение тестового модуля " от Kare Nuorteva, вы можете использовать функцию настройки, которая возвращает... функцию отрыва, которую вы откладываете.
См. Этот принцип:
func setupSubTest(t *testing.T) func(t *testing.T) {
t.Log("setup sub test")
return func(t *testing.T) {
t.Log("teardown sub test")
}
}
Функция настройки отвечает за определение и возврат разрыва.
Для каждого теста, например, в тестовом сценарии, управляемом таблицей:
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
teardownSubTest := setupSubTest(t)
defer teardownSubTest(t)
result := Sum(tc.a, tc.b)
if result != tc.expected {
t.Fatalf("expected sum %v, but got %v", tc.expected, result)
}
})
}
Ответ 2
Вы можете рассмотреть наличие таблицы функций subTestSetup, subTest и subTestTeardown, передающих соединение db/другие общие элементы в структуре (subTestSetup может вернуть эту структуру). Вы можете повторно использовать некоторые/части установки и снести в разные функции и сохранить эту модульность по мере роста требований к тестированию. Отклонить вызов subTestTeardown() перед вызовом subTest, чтобы гарантировать, что срыв кода выполняется, даже если есть какие-либо проблемы с subTest.