Узнайте, как тестировать настоящее сложное программное обеспечение, написанное на Go. Маленькое или большое, идеальное или не очень, не важно как выглядит ваш код - Вы можете его тестировать!
Скажите, если это звучит знакомо - вы учитесь как тестировать в Go, и кажется, что дела идут отлично. Все учебники супер, и вы не можете дождаться, чтобы начать применять то, что вы изучаете, в ваших реальных проектах. Вы запускаете свой редактор, захватываете свой последний проект, создаете свой первый исходный файл * _test.go, и внезапно возникает ощущение, что вы не понимаете, что делаете.
* звук разбитого стекла *
Что случилось?!?!
Все шло так здорово. Все эти примеры имели смысл, но теперь вы даже не знаете, с чего начать.
Этот обработчик HTTP «Hello, world» казался таким простым, но как вы тестируете сложные обработчики? Вы знаете, обработчики HTTP, которые делают что-то реалистичное, например, вставляют запись в базу данных или используют API для проверки чьего-либо адреса.
В этом отношении, как мы проверем что наши взаимодействия с базой данных работают, как мы ожидали? Или, может быть, в вашем приложении есть глобальная переменная БД - значит ли это, что тестирование просто невозможно?
Как насчет тех API, с которыми мы взаимодействуем? Мы их заглушим? Мы попали в API? Что произойдет, если мы достигнем предела скорости API или не будет даже тестового API?
Хорошо хорошо! Потратьте секунду, чтобы дышать, и позвольте мне раскрыть вам маленький секрет...
Тестирование не сложнее, чем написание любого другого кода Go. На самом деле, если бы мы хотели, мы могли бы протестировать наш код, просто написав основной пакет и взаимодействуя с кодом нашего приложения. Мы могли бы запаниковать, когда что-то не работает, как мы ожидали, и вуаля - у нас есть тест!
Но почему это так тяжело? Возможно, потому что мы упрощаем примеры до такой степени, что они теряют всю свою ценность.
Подумайте об этом, когда вы в последний раз писали функцию Palindrome
? Никогда? Так почему же все эти уроки показывают нам, как их протестировать?
Почему они не показывают нам, как тестировать реалистичное программное обеспечение? Что случилось с примером, где мы тестируем настоящий обработчик HTTP, которому нужен доступ к хранилищу данных? Или учебник, в котором мы создаем API и узнаем, как его протестировать, БЕЗ постоянного попадания в настоящий API. Разве не было бы замечательно, если бы мы могли научиться тестировать настоящее веб-приложение с реальной БД и реальной интеграцией с платежным API, таким как Stripe?
Тестирование с Go другой.
В этом курсе вы узнаете, как тестировать РЕАЛЬНОЕ программное обеспечение, а не функции палиндрома.
Нам нужно взглянуть на несколько отдельных примеров, чтобы изучить конкретные методы тестирования, но этого недостаточно, чтобы закрепить концепцию, поэтому мы не остановимся на этом. Мы создадим реальные проекты, которые научат вас, как применять все эти навыки тестирования в реальном программном обеспечении.
В одном проекте мы создаем веб-приложение, которое позволяет нам решать сложности, возникающие при тестировании приложения, использующего базу данных, сторонние API и многое другое. В другом проекте мы рассмотрим, как внутреннее тестирование помогает нам проверить правильность наших промежуточных шагов, а также обсуждаем недостатки тестирования не экспортируемых функций.
Вы узнаете о распространенных ошибках, которых следует избегать, чтобы написать более тестируемый код. Вы узнаете, как постепенно исправлять код, который уже поддался многим из этих ловушек.
Когда вы запускаете приложение с глобальной переменной БД, вам не нужно отказываться от тестирования. Вы точно узнаете, как вносить небольшие, управляемые изменения в код, которые позволят вам начать его тестирование практически сразу.
В следующий раз, когда вас спросят, следует ли макетировать хранилище данных или использовать реальную базу данных SQL, вы сможете обсудить плюсы и минусы обоих подходов со своими товарищами по команде и принять решение о правильном плане действий.
После прохождения этого курса у вас будут знания и навыки, необходимые для начала тестирования ваших собственных проектов. Вам все равно придется заняться работой, но тайна, растерянность и разочарование исчезнут.
Тестирование с Go разбит на два основных раздела: уроки и проекты!
Вместе уроки и проекты охватывают 173 видео и более 33 часов контента.
На уроках мы сосредоточены на изучении методов, необходимых для тестирования наших приложений. Мы изучим основы, такие как, как написать ваш первый тест и что такое тестирование на основе таблиц, но мы также рассмотрим более продвинутые методы тестирования, такие как:
- Testing race conditions
- Внедрение зависимостей
- Mocks, stubs, и fakes
- Тестирование с HTTP
- И многое другое!
Мы потратим некоторое время, используя небольшие изолированные примеры, чтобы изучить каждую технику, но постепенно они станут более реалистичными, когда вы ознакомитесь с тестированием. Вскоре мы рассмотрим тесты, использующие реальную базу данных SQL, помощников по тестированию, которые позволяют нам тестировать конечные точки HTTP, требующие аутентификации, и многое другое.
В проектах мы будем использовать все, что узнали на уроках, и практиковаться в их применении при создании реального программного обеспечения. Мы рассмотрим некоторые из наиболее распространенных ошибок, которые вы можете совершать при разработке приложения, а также как постепенно реорганизовать ваш код, чтобы сделать его более тестируемым. Мы увидим из первых рук, как разделить ваши интеграционные и модульные тесты, что позволит вам писать тесты для API, которые можно запускать как локально, так и онлайн с помощью реального API. Мы даже рассмотрим, как экспортировать некоторые из этих вспомогательных функций, чтобы другим пользователям, которые используют ваши библиотеки, было легче писать тесты.
Уроки (Урок 1-88)
Уроки состоят из 88 видеороликов, которые постепенно выведут вас из самых простых упражнений, таких как написание первого теста, вплоть до продвинутых методов, таких как наборы тестов интерфейса, внедрение зависимостей и многое другое.
Все уроки разбиты на разделы, что упрощает быстрый переход к предмету, который вы хотите изучить или просмотреть. Это означает, что через несколько лет, когда вам понадобится быстрое напоминание о тестировании подпроцессов, вы сможете быстро найти нужный раздел и вернуться к тестированию своего кода с минимальным временем простоя.
Проекты (Уроки 89-173)
В этом курсе три проекта:
- form - пакет Go (AKA библиотека), используемый для генерации HTML-форм из структур Go
- stripe - клиент API, используемый для взаимодействия с несколькими конечными точками API платежей Stripe
- swag - веб-приложение, которое позволяет пользователям заказывать пакеты наклеек, используя пакеты формы и stripe, которые мы создали в первых двух проектах
Каждый проект создается с нуля с целью научить вас тестированию в реальном программном обеспечении. Например, мы намеренно будем делать ошибки, которые усложняют тестирование нашего кода, а затем искать способы сделать его более тестируемым. Или в других случаях мы могли бы обсудить компромиссы одного подхода против другого, прежде чем в конечном итоге двигаться вперед и писать какой-либо код.
ПОЛНЫЙ ПАКЕТ
- Доступ ко всему. Уроки, проекты, исходный код и будущие обновления.
- 173 видео на общую сумму более 33 часов контента.
- Смотрите или скачайте видео с любого устройства. Вы можете научиться тестировать с Go, даже если у вас нет доступа к Интернету!
- Доступ ко всему исходному коду, используемому в курсе