Evosuite, инструмент для генерации кода модульных тестов Java.

EvoSuite — это инструмент с открытым исходным кодом, совместно разработанный университетами, такими как Шеффилд, который используется для автоматического создания наборов тестовых наборов.Созданные тестовые наборы соответствуют стандартам Junit и могут запускаться непосредственно в Junit.
Используя этот инструмент автоматического тестирования, можно значительно повысить эффективность разработки тестировщиков при условии обеспечения охвата кода. Однако он может только помочь в тестировании и не может полностью заменить ручную работу.
Адрес официального сайта: https://www.evosuite.org/contact/
адрес github: https://github.com/EvoSuite/evosuite

Основная функция:

Для указанного класса сгенерируйте единый тестовый код типа Junit4. ------Генерация тестов JUnit 4 для выбранных классов
Настройте сгенерированные варианты использования в соответствии с различными показателями покрытия, такими как линейное покрытие, покрытие ветвей, выходное покрытие и т. д. ------ Оптимизация различных критериев покрытия, таких как строки, ответвления, выходы и тестирование мутаций
Отдельные тестовые наборы сведены к минимуму, и будут сохранены только отдельные тестовые наборы, которые способствуют покрытию. ------Тесты сведены к минимуму: сохраняются только те, которые способствуют достижению охвата
Сгенерированные модульные тесты содержат утверждения Junit. ------ Генерация утверждений JUnit для фиксации текущего поведения тестируемых классов
Тесты запускаются в песочнице. ------Тесты запускаются в песочнице для предотвращения потенциально опасных операций
Виртуальная файловая система. ------ Виртуальная файловая система
виртуальная сеть. ------ Виртуальная сеть

Два, используйте

Официальный предоставляет несколько режимов работы, включая инструменты командной строки, плагины eclipse, плагины idea и плагины maven.
Обратитесь к официальному http://www.evosuite.org/documentation/tutorial-part-2/

2.1 Инструменты командной строки

Командная строка входит в корневую директорию проекта /target/classes/ и вводит команду:

java -jar evosuite-1.0.6.jar -class ClassName -projectCP targetPath/。

Описание параметров:
-class: объект для выполнения
-projectCP: установка пути к классу, созданному тестом
-help: просмотр доступных параметров командной строки
-criterion: стандартные параметры теста (строка, ветвь, cветвь, мутация исключение и т. д.)
-Dminimize =false//Он удалит все операторы, которые не соответствуют целевому покрытию
-Dassertion_strategy=all//Используйте большое количество утверждений для создания длинных тестов
для большего количества параметров. См. документацию по разработке: http ://www.evosuite.org/documentation/tutorial-part-1/

2.2 плагин maven

Настройте версию junit (выше Junit4.12) и увеличьте зависимость операции evosuite.

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.evosuite</groupId>
    <artifactId>evosuite-standalone-runtime</artifactId>
    <version>1.0.6</version>
    <scope>test</scope>
  </dependency>
</dependencies>
添加 evosuite 插件
<plugin>
   <groupId>org.evosuite.plugins</groupId>
   <artifactId>evosuite-maven-plugin</artifactId>
   <version>1.0.6</version>
</plugin>
有时候,我们会同时执行两类脚本,一类是RD手写的代码,一类是EvoSuite自动生成的,进入同时测试并不会出现什么大问题,但是也会对测试结果有片面的影响,因此需要只能EvoSuite仅对其生成的脚本起作用,需要在pom中加入如下插件。
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.20</version>
   <configuration>
     <properties>
       <property>
          <name>listener</name>
          <value>org.evosuite.runtime.InitializingListener</value>
      </property>
     </properties>
  </configuration>
</plugin> 

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

示例1:
mvn evosuite:help -Ddetail=true -Dgoal=generate
示例2:
mvn evosuite:generate -Dcuts=com.isoftstone.pcis.service.impl.ApiServiceImpl 
#注意:当工程代码量大时,生成花费的时间可能很长。
示例3:
mvn compile -DmemoryInMB=2000 -Dcores=2 -DtargetFolder=src/test/java/evosuite evosuite:generate evosuite:export test
注意:当工程代码量大时,生成花费的时间可能很长。

Описание доступных параметров и часто используемых команд:
a. -DmemoryInMB=2000 означает использование 2000 МБ памяти
b. -Dcores=2 означает использование 2 процессоров для распараллеливания скорости генерации
c. -Dcuts=packageName.className означает создание вариантов использования только для указанного класса. Несколько вариантов использования могут быть разделены английскими запятыми
d. -DtargetFolder=src/test/java/evosuite указывает, что созданные варианты использования помещаются в src/test/java/evosuite.
e. Часто используемые команды
e1. prepare: необходимо одновременно запустить тест EvoSuite и существующий тест mvn evosuite:prepare test
e2.evosuite:generate означает выполнение сгенерированного варианта использования
e3.evosuite:export означает экспорт варианта использования в каталог, в котором находится значение targetFolder (значение по умолчанию "src/test/java")
e4.evosuite:clean: Удалить все данные в папке ".evosuite", которая используется для хранения всех лучших тестов, созданных на данный момент.
Подробнее можно узнать в evosuite:help для просмотра

После завершения выполнения в каталоге .evosuite будет сгенерирован тестовый файл,
для класса будут сгенерированы два тестовых файла: _ESTest.java содержит одиночные тестовые случаи, а _scaffolding.java — базовый класс вариантов использования, т.е. используется для инициализации среды песочницы Evosuite перед тестированием.
Оценка эффекта
а. Вы видите, что Evosuite автоматически имитирует другие объекты, от которых зависит сервис.
б) Для параметров тестируемого метода используются различные граничные значения для тестирования в зависимости от типа параметра. Покрытие кода модульного теста, созданное evoSuite, может достигать: покрытия методов 100%, покрытия строк 51%.
в) Недостатки инструмента: вызов метода Mock-объекта может возвращать только нулевое значение и т. д., и для метода нет специальной заглушки, поэтому нормальная логика не может быть достигнута. Сценарии модульного тестирования, сгенерированные EvoSuite, больше подходят для тестирования пограничных и аномальных случаев. Обычные сцены по-прежнему зависят от людей

2.3 подключаемые модули затмения

Для подключаемого модуля EvoSuite требуется операционная среда Java 8, и он поддерживает только лунную и марсианскую версии Eclipse.Если в системе имеется несколько сред разработки Java, вам необходимо установить jre по умолчанию для Eclipse на версию Java 8. Ссылаться на

Установка подключаемого модуля и перезапуск
настроек параметров подключаемого модуля Eclipse
. Выберите класс для тестирования, щелкните правой кнопкой мыши и выберите «Создать тесты с помощью EvoSuite».
Создание отчета о тестировании Junit.

2.4 плагин идеи

Установка плагина и перезапуск IDEA.
Выберите тестируемый класс, щелкните правой кнопкой мыши, выберите «Запустить EvoSuite»
. В диалоговом окне ввода параметров задайте параметры и выполните задание.

вставьте сюда описание изображения

3. Другие подобные расширения

Коммерческие инструменты: AgitarOne, Jtest, соответствующие zhihu
Бесплатные инструменты: CodePlex AnalytiX, EvoSuite, Randoop, JUnitGenerator V2.0 (плагины IDEA)

рекомендация

отblog.csdn.net/heqiushuang110/article/details/126963984