Как создавать модульные тесты с помощью плагина на базе искусственного интеллекта

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

Прежде чем мы поговорим о плагине и компании, стоящей за ним, стоит упомянуть, что я не связан с этой компанией или ее сотрудниками. Однако раньше я работал в Оксфордском университете, поэтому мне очень приятно видеть такое интересное нововведение, появившееся в месте с большим количеством воспоминаний.

Шаг 1. Установите плагин и импортируйте проект.

Плагин IntelliJ IDEA на 100% бесплатен для разработки с открытым исходным кодом. Чтобы установить плагин, перейдите в Настройки IntelliJ IDEA, а затем найдите Плагины слева и выполните поиск Diffblue Cover как показано ниже.

После установки плагина, если есть существующий проект, импортированный в IntelliJ IDEA, тогда плагин начнет индексировать и анализировать всю кодовую базу (то есть классы, зависимости и т. Д.) В качестве фоновой задачи. Это может занять некоторое время в зависимости от размера и сложности вашей кодовой базы.

Вы также можете дополнительно настроить подключаемый модуль Diffblue Cover в настройках IntelliJ IDEA, чтобы настроить его под свои нужды.

Если вы хотите поиграть, я бы рекомендовал начать с базового проекта. Ниже приведен пример проекта весенней загрузки с контроллером, уровнем обслуживания, репозиторием с использованием данных Spring и базой данных в памяти:

git clone https://github.com/rhamedy/sample-rest-service.git

Не стесняйтесь клонировать репозиторий и поэкспериментировать с ним.

Шаг 2. Краткое описание проекта

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

Уровень контроллера

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

Как показано выше, у нас есть несколько конечных точек для получения списка студентов, добавления студента, получения студента по идентификатору и удаления студента по идентификатору.

Уровень обслуживания

Уровень сервиса соединяет Контроллер со слоем репозитория, на котором будет находиться большая часть логики.

Мы попытаемся сгенерировать модульные тесты, используя плагин Diffblue Cover для вышеуказанных классов.

Шаг 3. Создание модульных тестов с использованием подключаемого модуля на базе искусственного интеллекта

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

Если вы уже установили подключаемый модуль, щелкните правой кнопкой мыши StudentController и выберите параметр Записать тесты в меню действий, как показано выше.

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

Создание модульных тестов занимает немного времени - Diffblue Cover анализирует класс и его методы. Но это минимальное количество времени по сравнению с тем, как человек пишет тесты.

Ниже представлен StudentControllerTest, созданный Diffblue Cover.

Не знаю, как вы, но мне очень понравились сгенерированные тесты. Они кажутся надежными и следуют лучшим практикам весенней загрузки для тестирования.

Вы можете найти полный исходный код сгенерированных модульных тестов в this pull request.

Шаг 4. Тестовое покрытие сгенерированных модульных тестов.

Инструмент покрытия кода или тестирования может указывать процент кода, покрытого тестами.

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

Это совсем неплохо. Классы, для которых мы сгенерировали тесты, то есть пакеты контроллеров, служб и утилит, имеют довольно хороший процент покрытия.

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

В этом видео я быстро расскажу, как создавать модульные тесты с помощью подключаемого модуля Diffblue Cover на базе искусственного интеллекта.

Демо-генерация модульных тестов с использованием Diffblue Cover

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

Демонстрация создания модульных тестов с помощью плагина Diffblue Cover.

Недостатки автоматизации генерации модульных тестов

Ничего против плагина Diffblue Cover. Несмотря на множество преимуществ, связанных с генерацией модульных тестов, есть несколько недостатков, которые я хотел бы быстро затронуть.

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

Во-вторых, на мой взгляд, модульное тестирование косвенно влияет на то, как мы пишем код. Если мы напишем код, который плохо спроектирован, модульное тестирование станет еще более болезненным. Давайте возьмем пример метода, который выполняет десять разных действий с множеством вложенных условий и довольно сложной логикой. Было бы сложно написать тесты, охватывающие все пути выполнения таких методов.

Однажды, когда я выступал за модульное тестирование, один разработчик сказал мне об этом.

Я трачу 20% своего времени на написание кода и 80% на написание модульных тестов для кода.

Если код, который вы пишете, нелегко читать и понимать, он связан и не связан, модульное тестирование будет очень трудоемким и неэффективным процессом.

Заключение

В целом, я впечатлен тем, как работает плагин, и качеством созданных модульных тестов в нашем примере проекта.

Однако я заметил, что плагин не может генерировать тесты для определенных классов и в некоторых случаях пропускает пути выполнения (ветки), посмотрите демонстрацию видео на YouTube выше для получения дополнительной информации.

Спасибо за ваше время, и я надеюсь, что вам понравилась эта статья. Следите за новостями, чтобы увидеть более информативный контент.