Коллекция юнит-тестов Golang (чаще всего я использую gomonkey), добро пожаловать в избранное.
Коллекция юнит-тестов Golang (чаще всего я использую gomonkey), добро пожаловать в избранное.

Неважно на каком языке вы пишете,Единицы необходимы,Это может значительно улучшить наше качество,Уменьшите различные низкоуровневые ошибки и ошибки.

Являетесь ли вы надежным и квалифицированным программистом,Еще отличный программист,Каждый блок — это звено, которое мы должны реализовать

Юнит-тест проще,Здесь мы разбираем методы, используемые Базовым модульным тестированием и сторонней библиотекой изиспользовать методы.,При использовании из,Вы можете проверить здесь mock Адрес и основные сведения об использовании сторонней библиотеки можно собирать.

Базовое модульное тестирование

  • Имя файла модульного теста Golang

xxx_test.go

  • Функция модульного тестирования

func Testxxx (t * testing.T){}

  • Как написать тест из

t.Run("case1", func(t * testing.T){})

  • использоватьинструментгенерироватьодин тестовый файл ифункция

путь Голанда

  1. Выберите нас go Файлы исходного кода
  2. Щелкните правой кнопкой мыши имя функции.,может следоватьфункция ПриходитьгенерироватьФункция модульного тестирования,Вы также можете разделить весь исходный код на отдельные единицы тестовой функции.,Функция генерации будет выпущена xxx_test.go документсередина

использовать gotests инструмент

Также доступен в Linux серединаиспользовать gotests инструмент Приходитьгенерироватьодин тестовый файл и Функция одиночного тестирования,Эффект от понижения такой же, как и от Гланда из,Основной способ изиспользовать заключается в следующем:

существовать linux середина go get один раз gotests третья сторонаинструмент

Язык кода:javascript
копировать
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

существовать Функция одиночного Вы можете пропустить указание из Функция при запуске одиночных тестов из командной строки. одиночного тестирования

Язык кода:javascript
копировать
      func TestSkipFunc(t *testing.T) {
         if testing.Short() {
             t.Skipf("Пропустить текущий вариант использования")
         }
         。。。
      }

использовать golang из одновременно тест

мы знаем,Когда мы пишем одиночный тест, мы можем использовать golang из ребенокtest.,Например, тест на получение информации о пользователе из интерфейса во времени.,Вот и все:

Язык кода:javascript
копировать
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()

Язык кода:javascript
копировать
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 документ,Его можно открыть в браузере,То есть вы можете увидеть конкретные результаты одного теста.

использоватьутверждениеинструмент testify

Язык кода:javascript
копировать
go get github.com/stretchr/testify

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

использовать assert Сумка,Мы можем завершить утверждение непосредственно, изучив утверждение, соответствующее функции,Утверждать требования, основанные на различных,Существуют разные функции.

Напримернасиспользовать Equal функция,Вот и всеиспользовать

Язык кода:javascript
копировать
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 Инструменты тестирования сети

httptest этотинструмент,Знание значения после просмотра имени,даодинтестсетьинтерфейсизинструмент,использоватьэто,Мы не можем существовать, не начав конкретного web Сервис из ситуации пройти тест web интерфейс

httptest это стандартная библиотека net Модуль хранения сумок,кодсередина Импортировать вот так:

Язык кода:javascript
копировать
import "net/http/httptest"

Базовый метод исиспользовать и кейсы можно посмотреть по адресу: https://pkg.go.dev/net/http/httptest#example-Server. Вы можете подобрать его, если он вам нужен.

gock golang Тест сети mock инструмент

Язык кода:javascript
копировать
go get -u gopkg.in/h2non/gock.v1

кодсередина

Язык кода:javascript
копировать
import "gopkg.in/h2non/gock.v1"

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

https://pkg.go.dev/gopkg.in/h2non/gock.v1#readme-examples

go-sqlmock mock mysql инструмент

Увидев название инструмента, мы можем понять, что именно здесь mock база данныеиз, когда у нас нет среды или базы данные Нет возможности нормально использоватьиз, мы можем использовать go-sqlmock инструмент, очень удобный в использовании

Язык кода:javascript
копировать
go get github.com/DATA-DOG/go-sqlmock

кодсередина

Язык кода:javascript
копировать
import  "github.com/DATA-DOG/go-sqlmock"

Адрес дела: https://github.com/DATA-DOG/go-sqlmock.

miniredis mock redis изинструмент

Та же причина,это redis из mock инструмент,Мы можем посмотреть адрес,Давайте рассмотрим случай:

https://github.com/alicebob/miniredis

Язык кода:javascript
копировать
go get github.com/alicebob/miniredis/v2

кодсередина

Язык кода:javascript
копировать
import "github.com/alicebob/miniredis/v2"

Mock интерфейсинструмент gomock

Gomock Его по-прежнему очень приятно использовать, все в порядке То же самое можно сделать mock база данных, также дадут нам mock Для реализации кода мы существуем один тестовый файл середина, просто используем, использовать его по-прежнему очень глупо.

Сначала нужно убедитьсянасиз$GOPATH/binУже добавлено в переменные средысередина。

Мы можем установить эту стороннюю библиотеку вот так

Язык кода:javascript
копировать
go get github.com/golang/mock/gomock
go install github.com/golang/mock/mockgen@v1.6.0

такой же,Установитьназад,существоватьнасиз $GOPATH/bin Ниже вы можете увидеть, что есть mockgen инструмент

Сгенерируйте макет кода:

Язык кода:javascript
копировать
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 stub Скопление, может поддерживать накопление глобальных переменных.

Прежде всего, говоря о забивке свай, действительно ли мы знаем, что он конкретно имеет в виду? Краткое описание здесьодин раз:

существоватьпрограммное обеспечениетестсередина,Заглушка означает замену целевого кода некоторым кодом (заглушкой).,Обычно он используется для защиты или завершения бизнес-логики середина ключевого кода для облегчения модульного тестирования.

Проще говоря,Просто для удобства,Чтобы заменить исходную реализацию исходного кода

– Некоторые методы не реализованы,Или некоторые ресурсы, например база данных среды, не разрешены.,В это время можно начинать складывать

Язык кода:javascript
копировать
go get github.com/prashantv/gostub

кодсередина

Язык кода:javascript
копировать
import "github.com/prashantv/gostub"

о, иди, заглушка, из-за этого,Мы можем посмотреть адрес:https://github.com/prashantv/gostub

для go stub Я редко использую из, обычно играю в один разониз Скопление глобальных переменных,Потому что я обычно использую gomonkey Написать модульный тест на самом деле из yyds

Go monkey Очень мощный инструмент для забивания свай (я использую его чаще всего)

  • Он может для простой функции mock
  • Он может издеваться над методом объекта.

github:https://github.com/bouk/monkey

Как раз эти два типа выше охватили почти все наши юниттесты.

Скачать библиотеку

Язык кода:javascript
копировать
go get bou.ke/monkey

кодсередина

Язык кода:javascript
копировать
import "bou.ke/monkey"

использовать Способ

  • Mock обычнофункцияиспользовать monkey.Patch ,Например
Язык кода:javascript
копировать
monkey.Patch(getSpName,func ( uid string) (string, error) {
   if uid == "111"{
      return "hello111",nil
   }
   return "you are failed",fmt.Errorf("your uid is error")
})
  • Mock метод-член использовать monkey.PatchInstanceMethod,Например
Язык кода:javascript
копировать
monkey.PatchInstanceMethod(reflect.TypeOf(u),"GetUserAge",func(*User)int{
      return 100
})

потому что golang выполнит встроенную оптимизацию,и go mokey Нетдаодновременно Безопасностьиз,Поэтому нам необходимо обратить внимание на следующие два момента:

  • осуществлять go test изкогдаиспользовать go test -v -gcflags=-l
  • Писать Юнит-тестизиспользовать,Не нужноиспользоватьодновременнотест

Конечно, для конкретных и подробных случаев вы можете проверить адрес: https://github.com/bouk/monkey.

Используйте этот инструмент, а затем следуйте следующему из go convey Действительно очень nice

Go Convey Лучшая единая среда тестирования

  • Интегрированный go test,Существует богатая структура утверждений.,Также раскрашены результаты вариантов использования.

Адрес Гитхаба

Язык кода:javascript
копировать
https://github.com/smartystreets/goconvey

Установить

Язык кода:javascript
копировать
go get github.com/smartystreets/goconvey

кодсередина

Язык кода:javascript
копировать
import c "github.com/smartystreets/goconvey/convey"

использовать

  • один Convey одинтествариант использования
  • Вложенныйтест,использоватьнесколько Convey
Язык кода:javascript
копировать
// одинокий 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 из Услуг, таких как:

  • goconvey -port 9999
  • Затем откройте локальный из http://localhost:9999/ Прямо сейчас Можно увидетьконкретномуиз Результаты одного теста,В каждом случае можно увидеть, был ли он успешным или неудачным.,и причины неудач

Конечно, о go convey Из конкретных деталей использования и достижений вы можете просмотреть адрес: https://github.com/smartystreets/goconvey , используй это feel Лучше

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose