Продвинутое интеграционное тестирование
Sam Nasr
0:00 / 0:00
Продвинутое интеграционное тестирование
103 просмотра · 2 недели назад
Sam Nasr
831 подписчик
103 просмотра · 2 недели назад
Большинство ошибок в продакшене возникают не в одной функции — они находятся на стыках, где ваш код передает управление базе данных, проходит через конвейер аутентификации или преобразует JSON в объект. Модульные тесты, построенные на моках, не могут достичь этих стыков, поскольку мок — это лишь предположение о том, как ведет себя реальный объект.
В этом докладе шаг за шагом будет создан единый интеграционный тест, который обращается к реальному минимальному API ASP.NET Core по реальному HTTP и проверяет реальный ответ — без моков и самодельных токенов. Используя WebApplicationFactory и Testcontainers, мы разработаем жизненный цикл фикстуры с четырьмя явными, самопроверяющимися фазами: запуск базы данных, создание фабрики, материализация хоста, заполнение библиотекой. Мы увидим, почему композиция, а не наследование, является здесь правильным инструментом, позволяющим одному и тому же телу теста работать как с SQLite, так и с реальным контейнером PostgreSQL без дублирования логики.
Мы будем имитировать аутентификацию, сохраняя при этом авторизацию полностью реальной, используя схему с возможностью замены и гибкий конструктор — `WithJwtAuth`, `WithCookieAuth`, `AsAdmin()` — который превращает идентификацию в однострочный, читаемый тестовый сценарий. Мы также рассмотрим первоклассное тестирование CSRF/антифрагментации для аутентификации на основе cookie, что большинство интеграционных наборов полностью игнорируют.
Попутно: детерминированные временные метки через внедренный TimeProvider, сгенерированные данные запроса и ловушки, которые застают людей врасплох — несовместимые подписи `DisposeAsync`, зависимости, зависимые от других компонентов, и скрытые сбои, которые позволяют некорректному тестовому сценарию пройти проверку.
В итоге вы получите многократно используемый шаблон — продемонстрированный в общедоступном репозитории — для интеграционных тестовых сценариев, которые корректны по своей конструкции, громко завершаются с ошибкой, когда что-то действительно не так, и достаточно дешевы для написания в реальных условиях.
Джефф Зуэрлейн — старший консультант в NimblePros с более чем 15-летним опытом модернизации устаревших систем и создания пользовательских приложений, обладающий глубокими знаниями в области SQL Server, Postgres и SQLite. В настоящее время он специализируется на создании отказоустойчивых распределенных систем на C# и микросервисах, используя NServiceBus для обмена сообщениями и Polly для обеспечения отказоустойчивости.
Джефф также является основателем и разработчиком AuthorizationHub, саморазмещаемого плагина авторизации для ASP.NET Core, который позволяет командам управлять пользователями, ролями и разрешениями без изменения кода или повторного развертывания.
Проживая в Лейк-Форесте, штат Иллинойс, он активно участвует в технических блогах, YouTube и сообществе devBetter.
Это запись презентации для группы пользователей GLUG.NET от 20 августа 2026 года: https://www.meetup.com/glugnet/events...
Зарегистрируйтесь бесплатно, чтобы присоединиться к нам на следующей встрече: https://www.meetup.com/glugnet/