單元測試自動生成工具evosuite


github地址:https://github.com/EvoSuite/evosuite
官網地址:http://www.evosuite.org
 
快速開始:
1.  junit 
<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>
</dependencies>
 
2.添加 evosuite 插件
 <plugin>
    <groupId>org.evosuite.plugins</groupId>
    <artifactId>evosuite-maven-plugin</artifactId>
    <version>1.0.6</version>
  </plugin>
evosuite 的倉庫
<pluginRepositories>
  <pluginRepository>
    <id>EvoSuite</id>
    <name>EvoSuite Repository</name>
    <url>http://www.evosuite.org/m2</url>
  </pluginRepository>
</pluginRepositories> 
3.evosuite 的運行依賴
<dependency>
    <groupId>org.evosuite</groupId>
    <artifactId>evosuite-standalone-runtime</artifactId>
    <version>1.0.6</version>
    <scope>test</scope>
</dependency>

4.開始生成

mvn evosuite:generate
mvn compile -DmemoryInMB=2000 -Dcores=2 -Dcuts=com.xxx.xxx.api.service.impl.CurriculumServiceImpl-DtargetFolder=src/test/java/evosuite evosuite:generate evosuite:export
compile 表示編譯。evosuite 是基於編譯后的 .class 文件生成用例的,所以需要先編譯。
-DmemoryInMB=2000 表示使用 2000MB 的內存
-Dcores=2 表示用2個 cpu 來並行加快生成速度
-Dcuts=com.xxx.xxx.api.service.impl.CurriculumServiceImpl 表示只針對 com.xxx.xxx.api.service.impl.CurriculumServiceImpl 這個類生成用例。多個用例可以用英文逗號分隔
-DtargetFolder=src/test/java/evosuite 表示生成的用例放到 src/test/java/evosuite
evosuite:generate 表示執行生成用例
evosuite:export 表示導出用例到 targetFolder 的值所在的目錄中
 
Idea插件使用
http://www.evosuite.org/documentation/maven-plugin/
 
1.下載 evosuite-1.0.6 jar
2.idea安裝evosuite插件
3.配置
2.evosuite -jacoco
注意:EvoSuite的bytecode instrumentation和類似Jacoco這類工具在bytecode instrumentation上有可能有沖突,導致最后的覆蓋率統計都是0(修改separateClassLoader = true為false)
<plugins>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-report-plugin</artifactId>
          <version>3.0.0-M3</version>
      </plugin>
    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.0</version>
        <configuration>
          <excludes>//排出不需要收集覆蓋率的
             <exclude>**/*ClazzSearchController.class</exclude>
             <exclude>**/*Application.class</exclude>
             <exclude>com/xxx/xxxx/api/config/**/*</exclude>
          </excludes>
        </configuration>
        <executions>
        <!--                  <execution>-->
<!--                      <id>prepare-agent</id>-->
<!--                      <goals>-->
<!--                          <goal>prepare-agent</goal>-->
<!--                      </goals>-->
<!--                  </execution>-->
<!--                  <execution>-->
<!--                      <id>report</id>-->
<!--                      <phase>prepare-package</phase>-->
<!--                      <goals>-->
<!--                          <goal>report</goal>-->
<!--                      </goals>-->
<!--                  </execution>-->
<!--                  <execution>-->
<!--                      <id>post-unit-test</id>-->
<!--                      <phase>test</phase>-->
<!--                      <goals>-->
<!--                          <goal>report</goal>-->
<!--                      </goals>-->
<!--                      <configuration>-->
<!--                          <dataFile>target/jacoco.exec</dataFile>-->
<!--                          <outputDirectory>target/jacoco-ut</outputDirectory>-->
<!--                      </configuration>-->
<!--                  </execution>-->
                  <execution>
                      <id>prepare-agent</id>
                      <goals>
                          <goal>prepare-agent</goal>
                      </goals>
                  </execution>
                  <execution>
                      <id>generate-code-coverage-report</id>
                      <phase>test</phase>
                      <goals>
                          <goal>report</goal>
                      </goals>
                  </execution>
        </executions>
    </plugin>
</plugins>
 
2.執行命令
mvn jacoco:prepare-agent test jacoco:report
 

 

 

 3.查看測試報告

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM