Неважно на каком языке вы пишете,Единицы необходимы,Это может значительно улучшить наше качество,Уменьшите различные низкоуровневые ошибки и ошибки.
Являетесь ли вы надежным и квалифицированным программистом,Еще отличный программист,Каждый блок — это звено, которое мы должны реализовать
Юнит-тест проще,Здесь мы разбираем методы, используемые Базовым модульным тестированием и сторонней библиотекой изиспользовать методы.,При использовании из,Вы можете проверить здесь mock Адрес и основные сведения об использовании сторонней библиотеки можно собирать.
xxx_test.go
func Testxxx (t * testing.T){}
t.Run("case1", func(t * testing.T){})
Также доступен в Linux серединаиспользовать gotests инструмент Приходитьгенерироватьодин тестовый файл и Функция одиночного тестирования,Эффект от понижения такой же, как и от Гланда из,Основной способ изиспользовать заключается в следующем:
существовать linux середина go get один раз gotests третья сторонаинструмент
go get -u github.com/cweill/gotests/...
Мы можем существовать мы из GOPATH вниз bin Я вижу в каталоге, что уже есть gotests эта исполняемая программа
использовать gotests Это также очень просто. Просто выполните следующую команду, чтобы создать один тестовый файл, соответствующий файлу исходного кода. Если вам нужны более подробные инструкции, вы можете проверить. gotests --help
gotests -all -w xxx.go
выше 2 индивидуальныйинструмент, сгенерированный одиночный тестовый документ, функция одиночного тестирования, все соответствует goland требования к одиночному тестированию
go test
Вы можете напрямую увидеть, пройден ли результат выполнения или нет.
go test -v
Вы можете просмотреть статус выполнения каждой отдельной тестовой функции.
go test -run=xx
run=[поддержка обычных строк] , go test будет соответствовать run Следующая строка поддерживает регулярные выражения: соответствоватьконкретномуизФункция одиночного тестирования,И провести тест
go test -short
существовать Функция одиночного Вы можете пропустить указание из Функция при запуске одиночных тестов из командной строки. одиночного тестирования
func TestSkipFunc(t *testing.T) {
if testing.Short() {
t.Skipf("Пропустить текущий вариант использования")
}
。。。
}
использовать golang из одновременно тест
мы знаем,Когда мы пишем одиночный тест, мы можем использовать golang из ребенокtest.,Например, тест на получение информации о пользователе из интерфейса во времени.,Вот и все:
func Test_getUserInfo(t *testing.T) {
type args struct {
uid string
}
tests := []struct {
name string
args args
want string
wantErr bool
}{
// TODO: Add test cases.
{
"case1",
args{
"111",
},
"hello111",
false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := getUserInfo(tt.args.uid)
if (err != nil) != tt.wantErr {
t.Errorf("getUserInfo() error = %v, wantErr %v", err, tt.wantErr)
return
}
if got != tt.want {
t.Errorf("getUserInfo() got = %v, want %v", got, tt.want)
}
})
}
}
существовать golang изребеноктестсередина,Прямо сейчассуществовать t.Run(xxx,xxx) Для нашего варианта использования мы можем добавить этот оператор: t.Parallel()
xxx
t.Run("xxxx", func(t *testing.T) {
t.Parallel()
xxxxxx
})
xxx
go test -cover
Например:
Охват данных Создание файлов покрытия,Например res.out,Сноваиспользовать go tool инструмент Преобразовать в html Исходный код, мы можем просмотреть его напрямую в браузере середина
go test -cover -coverprofile=res.out
go tool cover -html=res.out
Волясоздано html документ,Его можно открыть в браузере,То есть вы можете увидеть конкретные результаты одного теста.
go get github.com/stretchr/testify
Мы можем существовать. Тестовая функциясередина плюс утверждение этого утверждения очень nice Понятно,Нет необходимости самостоятельно писать соответствующие значения отражения,а потом вынести решение
использовать assert Сумка,Мы можем завершить утверждение непосредственно, изучив утверждение, соответствующее функции,Утверждать требования, основанные на различных,Существуют разные функции.
Напримернасиспользовать Equal функция,Вот и всеиспользовать
import "github.com/stretchr/testify/assert"
func Testxxx(t * testing.T){
myAssert := assert.New(t)
myAssert.Equal("Ожидаемое значение", «фактическая стоимость», "Если ожидаемое значение равно фактическому, то все в порядке, если нет, то будет выдано сообщение об ошибке")
}
о golang testify assert Вы можете проверить официальный сайт: утверждать package - github.com/stretchr/testify/assert - Go Packages ,Вот более подробное использование из,Эта статья поможет вам с запросами и индексированием.
httptest этотинструмент,Знание значения после просмотра имени,даодинтестсетьинтерфейсизинструмент,использоватьэто,Мы не можем существовать, не начав конкретного web Сервис из ситуации пройти тест web интерфейс
httptest это стандартная библиотека net Модуль хранения сумок,кодсередина Импортировать вот так:
import "net/http/httptest"
Базовый метод исиспользовать и кейсы можно посмотреть по адресу: https://pkg.go.dev/net/http/httptest#example-Server. Вы можете подобрать его, если он вам нужен.
go get -u gopkg.in/h2non/gock.v1
кодсередина
import "gopkg.in/h2non/gock.v1"
Для конкретных случаев можно проверить следующий адрес, других примеров здесь писать не буду:
https://pkg.go.dev/gopkg.in/h2non/gock.v1#readme-examples
Увидев название инструмента, мы можем понять, что именно здесь mock база данныеиз, когда у нас нет среды или базы данные Нет возможности нормально использоватьиз, мы можем использовать go-sqlmock инструмент, очень удобный в использовании
go get github.com/DATA-DOG/go-sqlmock
кодсередина
import "github.com/DATA-DOG/go-sqlmock"
Адрес дела: https://github.com/DATA-DOG/go-sqlmock.
Та же причина,это redis из mock инструмент,Мы можем посмотреть адрес,Давайте рассмотрим случай:
https://github.com/alicebob/miniredis
go get github.com/alicebob/miniredis/v2
кодсередина
import "github.com/alicebob/miniredis/v2"
Gomock Его по-прежнему очень приятно использовать, все в порядке То же самое можно сделать mock база данных, также дадут нам mock Для реализации кода мы существуем один тестовый файл середина, просто используем, использовать его по-прежнему очень глупо.
Сначала нужно убедитьсянасиз$GOPATH/bin
Уже добавлено в переменные средысередина。
Мы можем установить эту стороннюю библиотеку вот так
go get github.com/golang/mock/gomock
go install github.com/golang/mock/mockgen@v1.6.0
такой же,Установитьназад,существоватьнасиз $GOPATH/bin
Ниже вы можете увидеть, что есть mockgen инструмент
Сгенерируйте макет кода:
mockgen -source=специфическаяизбаза данных Файлы исходного кода -destination=генерироватьиз конкретных файлов -package=Сумкаимя
использовать Способ:
Например
Вы можете увидеть картинку ниже середина,У нас из БД есть два интерфейса,один Get один Add
mockgen -source=server.go -destination=./db_mock.go -package=server
осуществлять Изназад,мы можем видеть,насиз В каталоге того же уровнягенерировать Понятно db_mock.go
файл, внутри о mock реализация,При этом реализуется специфическая избаза данных переписки интерфейса.
db_mock.go
кодреализацияЧтобы узнать больше о методах и случаях использования gomock, вы можете просмотреть адрес:
https://github.com/golang/mock
Прежде всего, говоря о забивке свай, действительно ли мы знаем, что он конкретно имеет в виду? Краткое описание здесьодин раз:
существоватьпрограммное обеспечениетестсередина,Заглушка означает замену целевого кода некоторым кодом (заглушкой).,Обычно он используется для защиты или завершения бизнес-логики середина ключевого кода для облегчения модульного тестирования.
Проще говоря,Просто для удобства,Чтобы заменить исходную реализацию исходного кода
– Некоторые методы не реализованы,Или некоторые ресурсы, например база данных среды, не разрешены.,В это время можно начинать складывать
go get github.com/prashantv/gostub
кодсередина
import "github.com/prashantv/gostub"
о, иди, заглушка, из-за этого,Мы можем посмотреть адрес:https://github.com/prashantv/gostub
для go stub Я редко использую из, обычно играю в один разониз Скопление глобальных переменных,Потому что я обычно использую gomonkey Написать модульный тест на самом деле из yyds
github:https://github.com/bouk/monkey
Как раз эти два типа выше охватили почти все наши юниттесты.
Скачать библиотеку
go get bou.ke/monkey
кодсередина
import "bou.ke/monkey"
использовать Способ
monkey.Patch(getSpName,func ( uid string) (string, error) {
if uid == "111"{
return "hello111",nil
}
return "you are failed",fmt.Errorf("your uid is error")
})
monkey.PatchInstanceMethod(reflect.TypeOf(u),"GetUserAge",func(*User)int{
return 100
})
потому что golang выполнит встроенную оптимизацию,и go mokey Нетдаодновременно Безопасностьиз,Поэтому нам необходимо обратить внимание на следующие два момента:
go test -v -gcflags=-l
Конечно, для конкретных и подробных случаев вы можете проверить адрес: https://github.com/bouk/monkey.
Используйте этот инструмент, а затем следуйте следующему из go convey Действительно очень nice
go test
,Существует богатая структура утверждений.,Также раскрашены результаты вариантов использования.Адрес Гитхаба
https://github.com/smartystreets/goconvey
Установить
go get github.com/smartystreets/goconvey
кодсередина
import c "github.com/smartystreets/goconvey/convey"
использовать
// одинокий convey
c.Convey("testcase", func() {
res := checkPalindrome(tt.in)
c.So(res, c.ShouldResemble, res)
})
// несколько convey Вложенный
c.Convey("Управление таблицей", t, func() {
//myAssert := assert.New(t)
tests := []struct {
in string
res bool
}{
{
"aaa",
true,
},
{
"aba",
true,
}
}
for index, tt := range tests {
c.Convey(fmt.Sprintf("Pal%d", index), func() {
//t.Parallel()
res := checkPalindrome(tt.in)
c.So(res, c.ShouldResemble, res)
})
}
})
Здесь мы можем увидеть использование Convey , он содержит тест и выше, чем test
Go convey Мало того, у него еще есть визуализация ui интерфейс, мы можем открыть его в существующем терминале goconvey из Услуг, таких как:
Конечно, о go convey Из конкретных деталей использования и достижений вы можете просмотреть адрес: https://github.com/smartystreets/goconvey , используй это feel Лучше