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

Почему важно издеваться над базой данных

  1. Изоляция тестов. Модульные тесты должны быть изолированы от внешних зависимостей, таких как базы данных, чтобы гарантировать, что сбои тестов связаны с тестируемым кодом, а не с проблемами самой базы данных.
  2. Скорость. Взаимодействие с реальной базой данных может замедлить работу набора тестов. Издевательство над базой данных позволяет быстро и часто запускать тесты во время разработки.
  3. Согласованность. Имитированные базы данных гарантируют, что тестовые данные остаются согласованными при различных запусках тестов, независимо от состояния реальной базы данных.

Имитирующая база данных в Go

Чтобы смоделировать базу данных в модульных тестах Go, вам необходимо выполнить следующие шаги:

  1. Использовать интерфейс. Определите интерфейс, который представляет операции с базой данных, от которых зависит ваш код. Этот интерфейс должен включать все методы, которые ваш код вызывает для взаимодействия с базой данных.
  2. Реализация макета. Создайте макет интерфейса. Этот макет предоставит заранее определенные ответы на вызовы, сделанные вашим кодом во время тестирования.
  3. Внедрение макета. В модульные тесты внедрите макет реализации интерфейса базы данных вместо использования реальной базы данных.
  4. Протестируйте свой код. Напишите модульные тесты для своего кода, используя внедренную макетную базу данных. Убедитесь, что ваш код работает правильно в различных сценариях.
  5. Утверждения. Используйте библиотеки утверждений, например testing, или сторонние библиотеки, например testify, чтобы делать утверждения о поведении вашего кода.

Давайте рассмотрим пример с использованием встроенного пакета Go database/sql и библиотеки github.com/DATA-DOG/go-sqlmock.

Пример: Издевательство над базой данных PostgreSQL

package main

import (…