Я не TDD: Прагматичное тестирование на Java

Мы строим клонированную версию Google Фото, и тестирование чертовски сложно!

Как нам проверить, что нашаJavaприложение запускает правильные процессы ImageMagick или что полученные миниатюры имеют правильный размер и действительно являются миниатюрами, а не просто случайными картинками котов? Как тестировать разные версии ImageMagick и операционные системы?

Что в видео

00:00 Введение

Мы начинаем видео с общего обзора того, что делает тестирование нашего клона Google Фото таким запутанным. Как и в последнем эпизоде, мы начали извлекать миниатюры из изображений, но теперь нам нужен способ их тестирования. Поскольку это делается через внешний процесс ImageMagick, нам предстоит непростая работа.

01:05 Настройка JUnit и написание первых тестовых методов

Во-первых, мы настроим JUnit 5. Так как мы не используем фреймворк, такой какSpring Boot, это отличная возможность добавить минимальный набор библиотек и конфигурации, который позволит нам начать работу с JUnit. Кроме того, мы напишем скелеты тестовых методов, размышляя о том, как мы подошли бы к тестированию нашего существующего кода и заботясь о наименовании тестовых методов и т. д.

04:19 Реализация определения версии ImageMagick

В прошлом эпизоде мы заметили, что запуск нашего Java приложения на разных системах приводит к неожиданным результатам или просто к ошибкам. Это происходит из-за того, что разные версии ImageMagick предлагают различный набор API, которые нам нужно вызывать. Поэтому нам нужно адаптировать наш код для обнаружения установленной версии ImageMagick и также добавить тестовый метод, который проверяет, действительно ли установлен ImageMagick, прежде чем запускать какие-либо тесты.

10:32 Оценка компромиссов

Как видно при обнаружении версий ImageMagick, реальная проблема в том, что для достижения 100% покрытия тестами с разнообразием операционных систем и установленных версий ImageMagick, потребуется довольно сложная CI/CD установка, которая не входит в рамки этого проекта. Таким образом, мы обсуждаем преимущества и недостатки нашего подхода.

12:00 Реализация @EnabledIfImageMagickIsInstalled

Однако мы можем сделать так, чтобы остальная часть нашего набора тестов запускалась только если ImageMagick установлен. Для этого мы напишем пользовательскую аннотацию JUnit 5 под названием EnabledIfImageMagickIsInstalled, которую можно добавить к любым тестовым методам или даже к целым классам для включения такого поведения. Если ImageMagick не установлен, тесты просто не будут запускаться вместо того, чтобы выдавать некрасивое сообщение об ошибке.

16:05 Тестирование успешной создания превьюшек

Наибольшая проблема, с которой мы столкнемся, заключается в следующем: как правильно убедиться, что миниатюры были созданы корректно? Мы подойдем к этому вопросу, проверяя код выхода ImageMagick, оценивая размеры файлов, а также загружая изображение и проверяя, что оно имеет правильное количество пикселей. Все это с помощью AssertJ и его SoftAssertions для легкого объединения нескольких утверждений в одно.

23:59 Все еще работает только на моем компьютере

Даже после тестирования всего рабочего процесса, нам все равно нужно убедиться, что мы вызываем разные API ImageMagick для разных версий. Мы можем быстро добавить это поведение для поддержки IM6 и IM7, и мы закончим.

25:53 Развертывание

Пришло время развернуть приложение на моем NAS. И на этот раз все работает, как и ожидалось!

26:20 Последние мысли о тестировании

В этом эпизоде мы провели достаточно много тестирования. Давайте подведем итоги всех вызовов и прагматичных стратегий тестирования, о которых мы узнали.

27:31 Что дальше

Мы закончим эпизод, взглянув на то, что будет дальше: проблемы с многопоточностью!

Увидимся в следующем эпизоде.

Source:
https://dzone.com/articles/i-dont-tdd-pragmatic-testing-with-java