«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Генерация модульных тестов с помощью раннего ИИ

Генерация модульных тестов с помощью раннего ИИ

Опубликовано 8 ноября 2024 г.
Просматривать:609

Ускорение создания модульных тестов и улучшение качества кода

Недавно у меня появилась возможность подробно изучить Early, ИИ-агент, предназначенный для автоматической генерации модульных тестов. Как человек, который регулярно работает с TypeScript и ExpressoTS Framework, мне хотелось увидеть, как Early может оптимизировать мой рабочий процесс. Я решил протестировать расширение vscode, которое они создали на основе моей новой библиотеки NPM, которую я разрабатывал, под названием @expressots/share.

Первые впечатления

Первое, что меня поразило в Early, — это способность автоматически генерировать модульные тесты для моей существующей базы кода. Вместо создания тестов с нуля я мог бы сосредоточиться на доработке сгенерированных тестов и повышении надежности и тестируемости моего кода. Этот сдвиг значительно ускорил мой процесс развития. Другой интересный аспект, который я заметил, заключается в том, что 83% сгенерированного кода я не вносил никаких изменений, он работал «из коробки» и увеличивал покрытие моего кода. Сэкономьте мне кучу времени.

Экономия времени и увеличение охвата

Всего за 8,5 часов мне удалось:

  • Создать модульные тесты примерно для 3000 строк кода.
  • Устранение проблем и повышение тестируемости кода.
  • Достигните общего покрытия кода 88 % с помощью 96 тестов.

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

Положительные результаты

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

export function printSuccess(message: string, component: string): void {
  stdout.write(chalk.green(`${message}:`, chalk.bold(chalk.white(`[${component}] ✔️\n`))));
}

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

Обнаружение потенциальных проблем

При доработке сгенерированных тестов я столкнулся с проблемой несоответствия типов:

Проблема: jest.fn() возвращает любое значение, а процесс.exit никогда не возвращает его, что приводит к несоответствию типов в TypeScript.
Решение. Измените макет, чтобы он соответствовал сигнатуре процесса.exit, гарантируя правильность типа.
Это открытие побудило меня скорректировать свой код для повышения безопасности типов, подчеркнув, как Early может помочь выявить тонкие проблемы, которые в противном случае могли бы остаться незамеченными.

Области для улучшения

Несмотря на общий положительный опыт, я столкнулся с несколькими проблемами, решение которых может повысить удобство использования Early:

  • Совместимость версий библиотеки. Ранее созданные тесты с использованием устаревших методов Jest в некоторых случаях, например:

Использование Jest 29.7

expect(Compiler.loadConfig()).rejects.toThrowError("process.exit() was called with code 1");

// Исправленная версия

expect(Compiler.loadConfig()).rejects.toThrow("process.exit() was called with code 1");
  • Параметры настройки для создания тестов Хотя создание тестов для крайних случаев было полезным, в некоторых сценариях в этом может не быть необходимости:

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

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

  • Усовершенствования пользовательского интерфейса в расширении VSCODE При переходе между Early и другими инструментами были выявлены некоторые ограничения пользовательского интерфейса:

Видимость результатов теста: мне приходилось переключаться между Early и Jest, чтобы увидеть, какие тесты пройдены или не пройдены.

Состояние дерева файлов: иерархия проектов в Early разрушается при переключении из других приложений, что требует от меня неоднократного открытия папок.
Предложение: Улучшите пользовательский интерфейс для отображения результатов тестов в Early, отражая структуру Jest. Поддержание состояния дерева файлов также улучшит взаимодействие с пользователем.

Unit Test Generation with Early AI

  • Издевательство и безопасность типов Проблема с возвратом jest.fn() любого из них предполагает необходимость более точного издевательства:

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

Заключение

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

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

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

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/rsaz/unit-test-generation-with-early-ai-31co?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3