Сбой теста при заданной c работе БД - PullRequest
0 голосов
/ 22 апреля 2020

Как я могу 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")
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...