Автоматическая генерация модульных тестов для Java?
Любой инструмент для автоматического создания модульных тестов для кода Java?
UPDATE:
Основное предназначение - быстро произвести модульные тесты для устаревшего кода, который будет реорганизован. Нет необходимости автоматически сохранять тесты в синхронизации с кодом после автоматической генерации.
Здесь был задан почти такой же вопрос, но ответ был для .NET вместо Java (Pex был принятым ответом):
Автоматическая генерация случаев Unit test для .NET и Java
Ответы
Ответ 1
Во всех трех продуктах есть попробовать, прежде чем покупать вариант, чтобы вы могли использовать их для сравнения сгенерированного кода с небольшим подмножеством вашего приложения.
Ответ 2
Коммерческие инструменты:
- AgitarOne кажется самым большим игроком в этой области. Существует также 30-дневная пробная версия и бесплатный веб-интерфейс под названием JUnit Factory. Например, независимый обзор использования инструмента в здесь. Генерация тестов AgitarOne в значительной степени фокусируется на тестах регрессии.
- Jtest - еще один крупный игрок, который существует с 1998 года. Существует бесплатная пробная версия. И AgitarOne, и Jtest были награждены несколько раз, и они являются и IDE на основе Eclipse: s.
- SilverMark Test Mentor, Java Edition - это коммерческий продукт, который, по-видимому, также может создавать тесты на основе Java-кода. Этот продукт у меня нет опыта.
Бесплатные инструменты:
- CodePlex AnalytiX раньше был коммерческим инструментом (это был первый коммерческий плагин для Eclipse в 2001 году), но так как Google купил компанию продукт был выпущен как бесплатный. Это полная IDE, основанная на Eclipse и финалист Jolt Award в тестовом поколении в 2007 году. Особенности хороши, но инструмент не обновлялся в течение длительного времени, поэтому, к сожалению, он не работает с текущими версиями eclipse и похоже, имеет проблемы с кодом, требующим java >= 1.5.
- EvoSuite является aa победителем SBST (программное обеспечение на основе поиска Тестирование) '13 unit test конкурс поколений, а также конкурс SBST '17 unit test. Существует плагин Eclipse, веб-интерфейс и версия командной строки инструмента. Существуют критерии регрессии, задокументированные, но, по-видимому, это еще не сработало - тесты дали цель для охвата веток, слабого охвата мутаций или сильного охвата мутаций.
- Randoop использует метод генерирования случайных результатов с обратной связью. Этот инструмент существует с 2007 года и постоянно развивается. Randoop может производить как регрессионные тесты, так и тесты на выявление ошибок. Это надежный и надежный инструмент командной строки, а также плагин Eclipse.
- Palus утверждает, что использует как динамический, так и статический анализ, и строит поверх Randoop. Его авторы утверждают, что он использовался внутри компании Google. Мой опыт работы с этим программным обеспечением заключается в том, что, по крайней мере, текущая версия (0.2), похоже, имеет некоторые внутренние проблемы, и она, похоже, не масштабируется хорошо.
- Daikon, Eclat, Javalanche, Java PathFinder, JCrasher, jWalk, Korat, RecGen и ReCrash являются бесплатными инструментами, которые также доступны.
Обратите внимание, что тесты, созданные Jtest и AgitarOne, зависят от лицензированных проигрывателей, и они не могут быть запущены, если у вас нет интегрированных плагинов. Это не касается бесплатных инструментов, которые я тестировал, которые генерируют независимые тесты.
Отказ от ответственности: я не связан ни с одним из этих инструментов, но я провел академические исследования по этому вопросу.
Ответ 3
NetBeans делает это автоматически из исходных файлов Java (я думаю, другие IDE тоже).
Возможно, вы можете заглянуть в плагин junit (ссылка в настоящее время недоступна: -()?
Ответ 4
Я думаю, что у Agitar был такой инструмент, как AgitarOne. Я думаю, вы все равно можете получить его, но убедитесь, что компания все еще там.
Ответ 5
Netbeans 8 имеет встроенную возможность построения модульных тестов, которые больше чем заглушки. Чтобы использовать эту функцию:
- Откройте класс, который вы хотите проверить.
- Выберите
Create/Update Tests
в меню Tools
.
- Выберите любые функции, которые вы хотите.
- Откройте созданный unit test и завершите оставшиеся части теста.
Ответ 6
Как насчет использования Randoop https://randoop.github.io/randoop/. Это работает как для Java, так и для .NET.