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

Тестирование является неотъемлемой частью цикла разработки программного обеспечения. Всестороннее тестирование предоставляет подробную информацию о целостности вашего приложения.

Вы можете предотвратить и исправить ошибки, написав тесты, оценив производительность программы и автоматизировав рабочие процессы.

Начало работы с тестированием в Go

Стандартная библиотека Go предоставляет развивающуюся тестирование упаковка. тестирование Пакет имеет бенчмаркинг, фаззинг, пропуск, суб-тестирование, суб-бенчмаркинг и другие функции.

Тестировать с этим пакетом легко. Вот простая тестовая структура, которая будет служить моделью для теста:

тип Случаи структура {
// ожидаемый результат теста
ожидал инт

// вывод функции
действительный инт

// значение, которое вы передаете функции
аргумент нить
}

Вот простая функция, которая преобразует строки в целые числа. Ваш тест будет проверять эту функцию.

instagram viewer
импорт (
"стрконв"
)

функцияStringToInteger(ул. нить)инт {
целое число, ошибка := strconv. Атой (ул.)

если ошибся != ноль {
возвращаться0
}

возвращаться целое число
}

StringToInteger функция возвращает 0 если ошибка при конвертации и целое число если ошибок нет.

Вот тестовая функция для StringToInteger:

функцияТестстрингтоцелое(тест * тестирование. Т) {
ожидаемыйInt := StringToInteger("3")

caseInstance := Случаи {
ожидаемый: ожидаемыйInt,
действительный: 3,
}

если caseInstance.expected == caseInstance.actual {
// здесь какой-то код
} еще {
тест. Потерпеть неудачу()
}
}

Тестстрингтоцелое тестовая функция принимает тестирование. Т объект в качестве аргумента. ожидаемыйInt переменная содержит результат преобразования строки. caseInstance переменная — это конкретизированная структура Cases для теста. если оператор сравнивает ожидаемые и фактические значения.

Потерпеть неудачу Метод возвращает неудачный тест в операторе else, если значения не равны.

Go предоставляет тест команда для автоматизации и получения информации о ваших тестах и ​​программах.

идти тест
идти помогите проверить

Страница справки содержит подробную информацию о том, как пройти тест работает:

Экосистема Go содержит множество библиотек, которые делают тестирование более доступным и гибким. Существует множество функций помимо тестирование пакет, в том числе регрессионное и модульное тестирование.

Пакет для свидетельских показаний

Пакет «Свидетельствовать» — один из самых популярных фреймворков Go для тестирования пакетов. Он предоставляет инструменты, которые вам понадобятся для написания эффективных тестов, с простыми утверждениями, имитацией и функциями набора тестов.

Testify подходит для разработки через тестирование, поскольку пакет предоставляет насмехаться упаковка. Это обеспечивает механизм для написания фиктивных объектов, которые можно использовать вместо реальных объектов при тестировании.

В пакете также предусмотрено:

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

Свидетельство распространяется на тестирование пакет, и вы можете использовать пройти тест команда для запуска тестов, написанных с помощью пакета Testify.

Testify поддерживает версии Go начиная с 1.13. Вы можете добавить пакет в качестве зависимости проекта с помощью этой команды:

идти получить github.com/stretchr/testify

Вот простой тест утверждения с пакетом Testify утверждать упаковка:

упаковка главный

импорт (
"тестирование"
"github.com/stretchr/testify/assert" // утверждать только пакет
)

// по соглашению имя функции должно быть "Something"
функцияTestSomething(т * тестирование. Т) {
// утверждение равенства
утверждать. Равно (т, 123, 123, "они должны быть равны")

// утверждение неравенства
утверждать. Неравно (t, 123, 456, "они не должны быть равными")
}

TestSomething тестовая функция принимает структуру типа тестирования тестирование пакет в качестве аргумента. Равный а также Не равный методы для утверждений на основе равенства и неравенства от Testify утверждать упаковка.

Пакет GoConvey

GoConvey это инструмент тестирования Go, предназначенный для выразительности над тестирование упаковка. Это включает в себя терминал (CLI) и браузер (GUI) тестирование функциональности.

Пакет GoConvey интегрируется с тестирование пакет, предоставляющий пользовательский веб-интерфейс для работы с собственными тестами Go. Он также включает в себя функциональные возможности для регрессионных тестов, настраиваемые выходные данные и генерацию тестового кода. Вы можете запускать тесты автоматически, получать доступ к форматам покрытия в HTML и настраивать графический интерфейс.

Запустите эту команду в терминале рабочей области Go, чтобы установить пакет Go Convey.

идти получить github.com/smartystreets/goconvey

Вот простой пример написания тестов с помощью пакета GoConvey.

упаковка главный

импорт (
. "github.com/smartystreets/goconvey/передача"
"тестирование"
)

функцияTestSomething(т * тестирование. Т) {
// Только передавать t в вызовы Convey верхнего уровня
Convey("Объявить переменную", t, функция() {
х := 1

Передать("приращение переменной", функция() {
х++

Convey("утверждать равенство", функция() {
Итак, (x, ShouldEqual, 2)
})
})
})
}

Вам нужно будет импортировать передавать package, используя точечную нотацию для теста.

Функция Convey из Передавать package помогает с определением объема теста. Последний Передавать вызов функции в примере кода утверждает равенство между Икс переменная и 2, с использованием Долженравно функция.

Ожидаемый пакет HTTP

Ожидание HTTP package — это простой в использовании, краткий, декларативный пакет для сквозного тестирования HTTP и REST API Go. Вы можете использовать его для постепенного создания HTTP-запросов и рекурсивной проверки ответов и их полезной нагрузки.

httpожидание package — это набор компоновщиков цепочек для HTTP-запросов и утверждений для HTTP-ответов и полезной нагрузки. Он построен на http, тестирование, и другие пакеты. Пакет также хорошо работает со встроенным httpтест упаковка.

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

Запустите эту команду в терминале вашего рабочего каталога, чтобы установить httpожидание упаковка.

идти получить github.com/gavv/httpexpect

Вот простой пример тестирования функции-обработчика с помощью httpожидание упаковка.

упаковка главный

импорт (
"ФМТ"
"github.com/gavv/httpexpect/v2"
"сеть/http"
"сеть/http/httptest"
"тестирование"
)

функцияпримерHandler()http.Обработчик {
возвращаться http. HandlerFunc(функция(писатель http. ResponseWriter, запрос *http. Запрос) {
ФМТ. Фпринтлн (писатель, «Привет, мир»)
})
}

функцияОбработчик тестового примера(т * тестирование. Т) {
// создать http. Обработчик
обработчик := примерHandler()

// запускаем сервер с помощью httptest
сервер := httptest. Новый сервер (обработчик)
отложить сервер. Закрывать()

// создать HTTP-экземпляр ожидания
ожидать := httpожидать. Новый (т, сервер. URL)

// это работает?
ожидать. ПОЛУЧИТЬ("/").
Ожидать().
Статус (http. СостояниеОК).JSON().Массив().Пустой()
}

примерHandler Функция обработчика возвращает обработчик HTTP для httpожидание упаковка. Обработчик тестового примера function объявляет экземпляр функции-обработчика. Затем он создает новый сервер для тестирования конечной точки с httpтест упаковка.

ожидать переменная ваша httpожидание экземпляр, попадающий в ПОЛУЧИТЬ запрашивать корневой путь конечной точки на сервере. Статус функция возвращает код состояния (в таком случае, 200), если проверка прошла успешно.

Пишите комплексные и интуитивно понятные тесты

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