Sobes.tech
Назад к вопросам
Junior — Middle
80

Каким образом вы осуществляли тестирование и верификацию корректности выполненных запросов?

Компании, где спрашивали
ЯндексЯндекс

Ответ от нейросети

sobes.tech AI

Для тестирования и верификации корректности выполненных запросов в Go обычно применяю следующие методы:

  • Юнит-тесты: Использую пакет testing для написания тестов, которые проверяют правильность формирования и выполнения запросов.
  • Мокирование базы данных: С помощью библиотек, например, sqlmock, можно имитировать поведение базы данных и проверять, что запросы формируются корректно и обрабатываются ожидаемо.
  • Логирование: Включаю логирование SQL-запросов для отладки и анализа.
  • Проверка результатов: Сравниваю полученные данные с ожидаемыми, чтобы убедиться в корректности.

Пример простого теста с использованием sqlmock:

import (
    "database/sql"
    "testing"
    "github.com/DATA-DOG/go-sqlmock"
)

func TestGetUserByID(t *testing.T) {
    db, mock, err := sqlmock.New()
    if err != nil {
        t.Fatalf("error opening stub database: %s", err)
    }
    defer db.Close()

    rows := sqlmock.NewRows([]string{"id", "name"}).AddRow(1, "John")
    mock.ExpectQuery("SELECT id, name FROM users WHERE id = ?").WithArgs(1).WillReturnRows(rows)

    user, err := GetUserByID(db, 1)
    if err != nil {
        t.Errorf("unexpected error: %s", err)
    }
    if user.Name != "John" {
        t.Errorf("expected name John, got %s", user.Name)
    }

    if err := mock.ExpectationsWereMet(); err != nil {
        t.Errorf("there were unfulfilled expectations: %s", err)
    }
}

Такой подход позволяет убедиться, что запросы формируются и обрабатываются корректно без необходимости подключения к реальной базе.