Использование элегантных тестовых примеров может принести разработчику множество преимуществ. Эти преимущества не ограничиваются улучшением качества кода, но также включают в себя совместную работу команды, удобство сопровождения проекта и долгосрочное управление техническим долгом.
go test
да Go Важность и значимость встроенных в язык команд для выполнения тестового кода отражаются во многих аспектах, которые необходимы для разработки качественного, поддерживаемого и надежного программного обеспечения. Go Применение имеет решающее значение.
go test
да Go Инструмент командной строки языка для тестирования кода. Он автоматически выполнит поиск текущего пакета и всех подпакетов с именем *_test.go
файлы,и запустите тестовые функции, определенные в этих файлах。go test
Предлагает множество вариантов и дочернюю для поддержки различных потребностей в тестировании. Ниже приведены некоторые часто используемые из них go test
Команды и их эффекты:
Базовый тестовый запуск
go test
:Запустить все тесты в текущем каталоге。go test ./...
:Запустите тесты в текущем пакете и всех подпакетах.。тестовый вывод
-v
:Вывод подробных журналов испытаний,Включает результаты выполнения для каждой тестовой функции.-cover
:Включить отчеты о покрытии тестами。-coverprofile=cover.out
:Записать данные о тестовом покрытии в указанныйфайлы,Для облегчения последующего анализа.тестовый выбор
-run="pattern"
:Запускайте только тестовые функции, имена которых соответствуют заданному шаблону.。Например,go test -run="TestMyFunction"
Запускайте только "TestMyFunction" тест.-short
:Только пробеги, отмеченные как short Тестовая функция (то есть имя тестовой функции заканчивается на TestShort
、ExampleShort
или BenchmarkShort
начало). Обычно это используется для быстрого тестирования.Стройте и запускайте
-c
:Скомпилируйте тестовые двоичные файлы,но не запускай его。
*-o filename
:Укажите имя выходного исполняемого файла。Пакеты и модули
-mod=readonly
、-mod=vendor
、-mod=mod
:Контролируйте, как разрешаются зависимости модулей.。Например,-mod=readonly
Отключите доступ к сети, чтобы найти зависимости.Параллелизм и таймауты
-p n
:Укажите количество параллельных тестов。n
По умолчанию GOMAXPROCS
значение, но вы можете указать большее число, чтобы параллельно запускать больше тестов.-timeout d
:Установить тайм-аут теста,d
продолжительность времени (например, 10s
выражать 10 Второй).Контрольный показатель
-bench="pattern"
:Запускает все совпадения, соответствующие заданному шаблону.Контрольный показатель。-benchmem
:существовать Контрольный Статистика распределения памяти отображается в виде показателя.тестовый вывод Формат
-json
:к JSON формат вывода результатов тестирования.дочерняя команда
go test -list
:Список всех названий тестов,Но не запускайте их.go test -list .
:Перечислите все имена тестов в текущем пакете и его подпакетах.。На языке Го,Проведение элегантного модульного тестирования часто включает в себя несколько ключевых шагов и лучших практик. Самый маленький тестовый модуль в модульном тестировании да Автоматизированное тестирование,Обычно для конкретной функции и метода. Go предоставляет мощную среду тестирования.,проходитьtesting
Пакеты для поддержки модульного тестирования。к Внизда Несколько шагов и советов по элегантному модульному тестированию:
Сейчас в Го,Тестовые случаи обычно размещаютсясуществоватьк_test.go
окончаниефайлысередина。Каждый тестовый примердафункция,его имякTest
начало,и принимает указатель на*testing.T
указатель как параметр。
package yourpackage
import (
"testing"
)
func TestYourFunction(t *testing.T) {
// тестовая логика
// Используйте t.Log, t.Error, t.Fail и другие методы записи результатов испытаний и информации о сбоях.
}
Для тестов, требующих тестирования нескольких комбинаций ввода и вывода, можно использовать Использование табличного тестирования. Такой подход делает тестирование более понятным и простым в управлении.
func TestYourFunctionWithTables(t *testing.T) {
tests := []struct {
name string
input int
expected int
}{
{"positive", 1, 2},
{"zero", 0, 0},
{"negative", -1, -2},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := YourFunction(tt.input)
if result != tt.expected {
t.Errorf("YourFunction(%d) = %d; want %d", tt.input, result, tt.expected)
}
})
}
}
Использовать библиотеку утверждений(нравитьсяtestify/assert
、testify/require
)Можетк Сделайте свой тестовый код более кратким и понятным.。Эти библиотеки предоставляют богатые функции утверждения.,Используется для сравнения значений, типа, Ошибки и т.д.
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestYourFunctionWithAssertions(t *testing.T) {
assert.Equal(t, expectedValue, YourFunction(inputValue), "YourFunction should return the expected value")
}
использоватьgo test
команда для запуска тестов。你Можеткпроходить Добавляйте разные логотипы(нравиться-v
、-short
、-run
)Настройка поведения тестовых запусков。
go test
go test -v
go test -short
go test -run TestYourFunction
Продвижение разработки через тестирование (TDD):разработка через тестированиеда Метод разработки программного обеспечения,其середина测试代码существовать Функции пишутся до реализации。go test
так что в Go практиковаться в TDD Это очень просто, поскольку дает возможность быстро запускать тесты и мгновенно предоставлять обратную связь по результатам тестов. Это помогает обеспечить корректность кода и облегчает постепенное создание и рефакторинг кода.
Автоматизированное тестирование:Автоматизированное тестированиеда Ключевая практика в современной разработке программного обеспечения。go test
Поддержка написания и запуска Автоматизированное тестирование,Эти тесты могут выполняться автоматически после изменения кода.,чтобы убедиться, что изменение не нарушает существующую функциональность. Это помогает уменьшить количество человеческих ошибок,Улучшите качество кода,и ускорить циклы разработки.
Контрольный показатель:Помимо модульного тестирования,go test
Также поддерживает Контрольный показатель(проходить -bench
flag), который позволяет разработчикам измерять и сравнивать производительность своего кода. Контрольный Показатель полезен для обеспечения оптимизации кода и обнаружения снижения производительности.
Суммируя,go test
да Go Мощный и незаменимый инструмент языка, полезный для обеспечения качества кода, содействия разработке через тестирование. тестирование、покрытие кода、Контрольный показатель、CI/CD Процесс и следование лучшим практикам сообщества имеют решающее значение.