Ginkgo - это зрелая структура тестирования для GO, разработанная, чтобы помочь вам написать выразительные характеристики. Гинкго строит на вершине testing
Go и дополняется библиотекой Matcher Gomega. Вместе Гинкго и Гомега позволили вам четко выразить намерение ваших спецификаций:
импорт ( Полем "github.com/onsi/ginkgo/v2". «github.com/onsi/gomega"...)var _ = description (« Проверка книг из библиотеки », Label (« Библиотека »), func () {библиотека var *Библиотеки. *users.userbeforeeach (func () {library = library.newclient () book = & books.book {название: «Les Miserables», автор: «Виктор Хьюго», } valjean = users.newuser ("jean valjean") }) Когда («в библиотеке есть рассматриваемая книга», func () {ofeeach (func (ctx speccontext) {wearm (library.store (ctx, book)). }) Контекст ("и книга доступна", func () {it ("предоставляет его читателю", func (ctx speccontext) {weals (valjean.checkout (ctx, библиотека, "les miserables")). (Effect ()) ожидайте (valjean.books ()). To (contactElement (book)) ожидайте (Library.UserWithBook (ctx, книга)). To (evall (valjean))) }, SpectimeOut (Time.Second * 5)) }) Контекст ("Но книга уже была проверена", func () {var javert *users.userbeforeeach (func (ctx speccontext) {javert = users.newuser ("javert") ожидайте (javert.checkout (ctx, Библиотека, "Les Miserables")). to (effuce ()) }) It («рассказывает пользователю», func (ctx speccontext) {err: = valjean.checkout (ctx, библиотека, "les miserables") ожидайте (err) .to (matcherror ("Les Miserables в настоящее время проверяется") ) }, SpectimeOut (Time.Second * 5)) It («Позволяет пользователю внести удержание и получать уведомление позже», Func (CTX Speccontext) {ожидаете (valjean.hold (ctx, библиотека, "Les miserables")). (Effect ()). Ожидайте (valjean.holds (ctx)). )) By («Это в конечном итоге сообщает Valjean») уведомление: = «Les Miserables готова к забору» в конечном итоге (ctx, valjean.notifications). Можно ли (ContactElement (уведомление)) ожидать (valjean.checkout (ctx, библиотека ». LES Miserables ")). To (effect ()) ожидать (valjean.books (ctx)). To (canceedelement (book)) ожидать (valjean.holds (ctx)). To (beempty ()) }, Spectimeout (время. Секунды * 10)) }) }) Когда («Библиотека не имеет рассматриваемой книги», func () {it («рассказывает читателю, что книга недоступна», func (ctx speccontext) {err: = valjean.checkout (ctx, библиотека, » Les Miserables ") Ожидайте (err) .to (matchError (" Les Miserables нет в каталоге библиотеки "))) }, SpectimeOut (Time.Second * 5)) }) })
Прыгайте в документы, чтобы узнать больше. Это легко загрузить и начать писать первые характеристики.
Если у вас есть вопрос, комментировать, отчет об ошибках, запрос на функции и т. Д. Пожалуйста, откройте проблему GitHub или посетите канал Ginkgo Slack.
Будь то написание основных спецификаций модулей, сложные спецификации интеграции или даже характеристики производительности - Ginkgo дает вам выразительный язык, специфичный для домена (DSL), который будет знаком пользователям, приходящим из таких фреймворсов, как быстрый, RSPEC, жасмин и разоренный. Этот стиль тестирования иногда называют «разработкой, основанной на поведении» (BDD), хотя полезность Гинкго выходит за рамки тестирования на уровне приемлемости.
С помощью DSL Ginkgo вы можете использовать Nestable Describe
, Context
и When
контейнерные узлы, чтобы помочь вам организовать ваши характеристики. BeforeEach
и AfterEach
узлов настройки для настройки и очистки. It
и Specify
предметные узлы, которые удерживают ваши утверждения. BeforeSuite
и AfterSuite
узлов для подготовки и очистки после набора ... и многое другое!.
Во время выполнения Гинкго может запускать ваши характеристики в воспроизводимо случайном порядке и обладает сложной поддержкой для спецификации. На самом деле, запуск спецификаций параллельно так же просто, как
Гинкго -П
Следуя установленным шаблонам для написания параллельных характеристик, вы можете построить даже большие, сложные интеграционные люксы, которые чисто параллельно и выполняются выполняются. И вам не нужно беспокоиться о том, что ваш набор спецификаций висит или оставляя беспорядок - Ginkgo обеспечивает context.Context
и возможность прерывать спецификацию после установленного периода времени, а затем очиститься.
По мере того, как ваши люксы выращивают Ginkgo, помогает вам держать ваши характеристики, организованные с этикетками, и позволяет легко запускать подмножества спецификаций, либо программно, либо в командной строке. А отчетная инфраструктура Ginkgo генерирует машиночитаемый выход в различных форматах и позволяет создавать собственную инфраструктуру отчетности.
Ginkgo поставляется с ginkgo
, инструментом командной строки с поддержкой генерации, запуска, фильтрации и профилирования люксов Ginkgo. Вы даже можете попросить Ginkgo автоматически запустить ваши характеристики, когда он обнаруживает изменение с помощью ginkgo watch
, что позволяет быстрым петлям обратной связи во время разработки тестирования.
И это просто Гинкго! Гомега приносит богатую, зрелую семью утверждений и совпадений в ваши люксы. С Gomega вы можете легко смешать синхронные и асинхронные утверждения в ваших спецификациях. Вы даже можете быстро и легко построить свой собственный набор экспрессивных доменных матчеров, составив существующие строительные блоки Gomega.
Счастливого тестирования!
Гинкго лицензирована
См. Appling.md