Давайте рассмотрим, почему вы никогда не должны пропускать автоматизированные тесты и с чего начать.

Слушая слово тестировать, младшие разработчики могут слишком много думать. Большую часть времени они намеренно пропускают тесты, думая, что это пустая трата времени.

Конечно! Тестирование иногда может занимать много времени, но в пропорциональном отношении оно может спасти жизнь.

Всегда хорошо исправить свою ошибку, прежде чем это сделает кто-то другой.

Сегодня мы рассмотрим все, что вам нужно знать о тестировании с помощью golang и gin.

Ключевые линии

  1. Должны ли вы писать модульные тесты или тесты E2E (End-To-End) для своего проекта?
  2. Как начать писать модульные тесты для обработчиков джина в Golang?
  3. Создайте тестовый контекст джина
  4. Подготовка запросов

1. Должны ли вы писать модульные тесты или E2E-тесты для своего проекта?

Ответ: это зависит.

Тестирование может быть любого типа (в зависимости от ваших предпочтений), например модульное тестирование, E2E-тестирование, интеграционное тестирование и т. д.

В конечном счете, ответственностью тестов является проверка текущего поведения кода для предотвращения будущих регрессий.

Что такое модульный тест?

Это блок кода, написанный для проверки поведения небольшого фрагмента кода. В Golang это в основном функция или класс.

Почему вы должны писать модульные тесты?

Модульный тест проверяет работу отдельных модулей (функции или класса) и выявляет скрытые уязвимости, прежде чем он будет развернут на производстве.

«Если вы выберете крепкие кирпичи, крепче будет только стена»

Считайте блоки своего кода кирпичиками, а весь код — стеной.
Единицы — это основные строительные блоки вашего кода.
Таким образом, вся система сможет работать хорошо только в том случае, если отдельные части работают хорошо.

Что такое тест E2E?

Это также блок кода, который будет тщательно тестировать код (от головы до конца), в конечном итоге задействуя более одного модуля, такого как функции или классы.

Например, для написания E2E-теста API вам нужно вызвать саму его конечную точку с требуемыми данными запроса.

Почему вы должны писать тесты E2E?

E2E-тестирование играет важную роль в обеспечении качественного взаимодействия пользователей с приложениями.

Поскольку юнит-тест уже проверяет поведение отдельных юнитов, E2E-тест проверяет, правильно ли комбинируются юниты, чтобы заставить систему работать.

Модульные тесты располагаются над тестами E2E, если вы считаете, что поведение успешно проверено с помощью модульных тестов, тесты E2E могут быть необязательными.

В зависимости от варианта использования оба могут быть смешаны.

2. Как начать писать модульные тесты для обработчиков джина в Golang?

Чтобы начать работу с модульными тестами, необходимо вызвать единицу кода (функцию или иногда класс) с требуемыми запрошенными данными и наблюдать за ее выводом.

Это легко, когда у вас есть простые функции, такие как

func sum(a int, b int) int {
   return a + b
}

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

Однако это вовсе не невозможно!
В этой статье мы обсудим, как тестировать обработчики (функции) gin, использующие контекст, с помощью контекста test gin.

Давайте начнем!

3. Создайте тестовый контекст джина

Рассмотрим простую функцию ниже, для которой вы хотите написать тест.

Аргументом функции HelloWorld является контекст gin, который нельзя передать так просто, как мы передаем в качестве аргумента целое число или строку 😨.

Мы должны подготовить тестовый контекст gin для тестирования нашей функции HelloWorld, так как это обработчик gin.

Приведенный выше код создает тестовый контекст джина, с которым мы можем играть во время тестирования нашего кода 😎!

gin.SetMode(gin.TestMode)устанавливает режим gin в test.

gin.CreateTestContext(w) — создает тестовый контекст gin для запуска тестов, который будет иметь httptest.NewRecorder в качестве аргумента.

Вы можете узнать больше о httptest. Здесь httptest.NewRecorder() будет отвечать за запись ответа на HelloWorld().

Здесь ctx.Request настраивает заголовок HTTP, заключенный в контекст.

Ура!! вы только что создали макет контекста джина для запуска тестов.

4. Подготовка запросов

Поскольку у нас могут быть HTTP-запросы с разными методами запроса, давайте настроим их отдельно.

Имитация контекста gin из предыдущего шага будет передана в качестве аргумента для имитации запросов ниже.

ПОЛУЧАТЬ

Передача параметров пути

c.Params используется для предоставления параметров пути к функции.

MockJsonGet будет заключать данные запроса в контекст.

Например, если конечная точка похожа на r.get("/users/:id”, GetUserId) , id должен присутствовать при вызове функции.
Но поскольку мы не вызываем конечную точку, мы можем передать c.Params вместе с с необходимыми парами ключ-значение, как показано в приведенном выше коде.

Передача параметров запроса

Для параметров запроса нам нужно немного изменить имитацию контекста, добавив значения ключа URL в c.Request, как показано в приведенном ниже фрагменте.

Полный код

В MockJsonGet параметры запроса и пути являются необязательными.

Вы увидите, что параметры запроса и параметры пути напечатаны внутри GetUserId().

ПОЧТА

Для всех типов запросов контекст gin test остается одинаковым.

Здесь контент будет иметь запрос JSON, который сначала будет преобразован в байт, а затем будет обернут как тело запроса тестового контекста gin.

ПОМЕЩАТЬ

Макет запроса PUT будет комбинацией GET и POST, так как для обновления чего-либо нам понадобится его уникальный идентификатор и детали обновления.

Я взял только параметры пути, при желании вы также можете включить параметры запроса.

УДАЛИТЬ

Для удаления потребуется только параметр пути/параметр запроса, как указано ниже.

Прекращение мыслей

Использование тестового контекста gin эффективно, когда вы хотите протестировать обработчик gin, но не хотите вызывать реальную конечную точку (тест E2E) во время тестирования.

Как всегда, предложения более чем приветствуются, пожалуйста, добавляйте комментарии, если они у вас есть.

продолжайте тестирование для лучшего пользовательского опыта!

Спонсор



Похожие популярные статьи





Спасибо за вашу поддержку!

Если вам нравится то, что вы читаете, обязательно 👏 👏👏 это ниже — как писатель это означает мир!

Подпишитесь на Canopas, чтобы получать новости об интересных статьях!