Вопрос или проблема
Как улучшить покрытие ветвей тестов, сгенерированных Randoop.
Мне необходимо сгенерировать тесты с помощью Randoop, чтобы получить >=50% покрытия ветвлений, но я получаю только 48%. Показано, что один из моих классов имеет очень низкое покрытие (43%). Обратите внимание, что я не могу изменять свой класс. Я хотел бы изменить тест Junit, но как? У меня нет никаких идей.
Я попытался сгенерировать тест снова, но результат все еще неудовлетворительный.
CMD prompt:
java -ea -classpath …\randoop-all-4.3.3.jar;…\eclipse-workspace\Proj\bin randoop.main.Main gentests –testclass=JSubj –time-limit=60 –junit-output-dir=…\eclipse-workspace\Proj/test –regression-test-basename=”JunitTest”
Ответ или решение
Для улучшения охвата ветвлений в тестах, сгенерированных с помощью Randoop, и достижения желаемых 50% покрытий, вам следует рассмотреть несколько стратегий. Поскольку вы не можете изменить сам класс, вам необходимо сосредоточиться на оптимизации ваших тестов.
-
Анализ текущего покрытия: Используйте инструменты анализа покрытия, такие как JaCoCo или Cobertura, чтобы детально выяснить, какие ветви кода не охвачены. Это даст вам четкое представление о том, какие конкретные условия и методы остаются необработанными вашими тестами.
-
Создание целевых тестов: Разработайте целевые тесты с учетом недостатков, выявленных в анализе покрытия. Следите за тем, чтобы ваши тесты проверяли границы значений, а также различные сценарии, которые могут активировать дополнительные ветви кода. Обозначьте классы и методы в своем классе
JSubj
, которые вызывают недостаточное покрытие, и постарайтесь создать тесты, которые активируют эти ветви. -
Использование Randoop с дополнительными параметрами: Попробуйте настроить дополнительные параметры в Randoop, которые могут помочь улучшить их результаты. Например, вы можете увеличить время генерации тестов, чтобы дать Randoop больше возможностей для создания тестов, которые охватывают требуемые ветви. Можно добавить параметр
--max-size
для управления размером генерируемых тестов, чтобы убедиться, что более сложные сценарии также рассматриваются.Пример команды может выглядеть так:
java -ea -classpath ...\randoop-all-4.3.3.jar;...\eclipse-workspace\Proj\bin randoop.main.Main gentests --testclass=JSubj --time-limit=300 --max-size=8 --junit-output-dir=...\eclipse-workspace\Proj/test --regression-test-basename="JunitTest"
-
Комбинирование Randoop с другими инструментами: Рассмотрите возможность использования других инструментов генерации тестов совместно с Randoop. Такие утилиты, как EvoSuite, могут помочь в создании тестов, которые могут охватить дополнительные ветви и условия.
-
Кирпичики для зависимости: Если ваш тестируемый класс зависит от других классов или компонентов, убедитесь, что они также правильно подготавливаются и учитываются при запуске тестов. Иногда недостаточное покрытие может быть связано с тем, что зависимости имеют не охваченные ветви.
-
Обратная связь на тестирование: Запускайте и анализируйте тесты после каждого изменения и выбирайте наиболее успешные стратегии, чтобы отслеживать ваш прогресс. Используйте полученные данные для улучшения и адаптации ваших тестов.
- Документирование результатов: Для лучшего понимания того, что работает, а что нет, ведите журнал ваших попыток изменения подхода и анализируйте успешность каждого из них.
Следуя этим рекомендациям, вы, вероятно, сможете повысить покрытие ветвей в ваших тестах до требуемого уровня или даже выше. Удачи!