Как я могу go написать подробные тесты для такого рода функций?
Я думаю, что я хочу проверить следующее: Что произойдет, если база данных или соединение с базой данных прервется выключено в середине функции?
func Do(database *db.DB) error {
// because of this preceding setup, DB Operation 1, 2 and 3 will always
// have good data
if err := setUpWithGoodData(); err != nil {
return err
}
if err := DBOperation1(database); err != nil {
return fmt.Errorf("operation 1 failed: %w", err)
}
if err := DBOperation2(database); err != nil {
return fmt.Errorf("operation 2 failed: %w", err)
}
if err := DBOperation3(database); err != nil {
return fmt.Errorf("operation 3 failed: %w", err)
}
}
Это то, что я хочу проверить, но как я могу, когда DBOperation1, 2 и 3 всегда будут иметь хорошие данные? Это вообще возможно?
func TestDo(t *testing.T) {
t.Run("returns expected error when DBOperation1 fails", func(t *testing.T) {
assert.Contains(t, Do(testDB).Error(), "operation 1 failed")
})
t.Run("returns expected error when DBOperation2 fails", func(t *testing.T) {
// here DBOperation1 should pass, but 2 should fail
assert.Contains(t, Do(testDB).Error(), "operation 2 failed")
})
t.Run("returns expected error when DBOperation3 fails", func(t *testing.T) {
// here DBOperation1 and DBOperation 2 should pass, but 3 should fail
assert.Contains(t, Do(testDB).Error(), "operation 3 failed")
})
}