工具嚐鮮--單元測試自動生成工具 evosuite

做者|高嘉怡java

Evosuite簡介


EvoSuite是由Sheffield等大學聯合開發的一種開源工具,用於自動生成測試用例集, 生成的測試用例均符合Junit的標準,可直接在Junit中運行。

經過使用此自動測試工具可以在保證代碼覆蓋率的前提下極大地提升測試人員的開發效率。可是隻能輔助測試,並不能徹底取代人工,測試用例的正確與否還需人工判斷。web

官方提供了包括:命令行工具、eclipse 插件、idea 插件、maven 插件 在內的數種運行方式。本文主要介紹:idea 插件、maven 插件。apache

Evosuite的配置與使用



maven -- EvoSuite插件微信

一、pom.Xml配置

配置 junit 版本app

       
         
       
       
        
        
                 
        
        
  1. eclipse

  2. maven

  3. 編輯器

  4. ide

  5. 工具

<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> 配置evosuite 插件:<build> <plugins> <plugin> <groupId>org.evosuite.plugins</groupId> <artifactId>evosuite-maven-plugin</artifactId> <version>1.0.6</version> </plugin> </plugins></build><dependency> <groupId>org.evosuite</groupId> <artifactId>evosuite-standalone-runtime</artifactId> <version>1.0.6</version> <scope>compile</scope></dependency>

二、maven -- EvoSuite插件使用

使用以前先了解一下基本命令:

  • prepare:須要同時運行EvoSuite測試和現有測試mvn evosuite:prepare test

  • compile:表示編譯。evosuite 是基於編譯後的 .class 文件生成用例的,因此須要先編譯

  • -DmemoryInMB=2000:表示使用 2000MB 的內存

  • -Dcores=2 表示用2個 cpu 來並行加快生成速度

  • -Dcuts=alexp.blog.service.PostServiceImpl

    示只針對 alexp.blog.service.PostServiceImpl 這個類生成用例。多個用例能夠用英文逗號分隔

  • -DtargetFolder=src/test/java/evosuite

    示生成的用例放到 src/test/java/evosuite

  • evosuite:generate :表示執行生成用例

  • evosuite:export:默認狀況下,EvoSuite在「 .evosuite」文件夾中建立測試。經過使用「導出」,將生成的測試複製到另外一個文件夾,該文件夾能夠使用「 targetFolder」選項設置(默認值爲「 src / test / java」)

  • evosuite:clean:刪除「 .evosuite」文件夾中的全部數據,該文件夾用於存儲到目前爲止生成的全部最佳測試

具體更多詳情可evosuite:help進行查看

準備被測試方法,如:demoService

控制檯執行:

mvn compile evosuite:generate  -Dcuts=demoTest.testService.demoTwoService  evosuite:export  -DtargetFolder=src/main/java/testcase

對指定文件進行編譯生成用例 放置指定文件

生成結果以下,有兩個文件:

demoService_ESTest:測試用例文件

demoService_ESTest_scaffolding:用例基類,用於在開始測試前初始化


注意:

一、運行後會產生evosuite 文件 存儲生成測試用例文件

二、用例生成地址爲:DtargetFolder+ Dcuts被測文件路徑,

緣由:evosuite:export 經過用「導出」,將生成的測試複製

到另外一個文件夾,(根據自身狀況)導package 與

import須要手動調整


查看運行結果

Example 1:被測試內容demoTwoService.java

mvn  compile  evosuite:generate  -Dcuts

=demoTest.testService.demoTwoService 

生成測試方法case:

IDEA-- EvoSuite插件的配置與使用

一、打開IDE,進入setting(mac版本是Preferences)選擇plugins,點擊Browse repositories,搜索EvoSuite Plugin,而後選擇Install plugin

二、重啓IDEA

三、打開idea選擇文件右鍵,就能夠看見Run EvoSuite

四、點擊Run EvoSuite 能夠看見參數輸入框

  • -DmemoryInMB=2000 表示使用 2000MB 的內存

  • -Dcores=2 表示用2個 cpu 來並行加快生成速度

  • Mavenlocation:Maven地址,當項目是Maven

    項目時須要

  • EvoSuite location:evosuite-1.0.6.jar包地址,

    項目是非Maven項目時須要

配置maven(D:\workspace\maven\apache-maven

-3.6.3\bin\mvn.cmd)路徑或EvoSuitejar路徑

如上,配置完Maven location(or EvoSuite location)

回車即觸發執行,執行完畢後會提示:

Example 2:被測試內容demoService

 
           
           
             
           
           
            
            
                     
            
            

 
           

 
           

生成的測試用例:

覆蓋率:

使用EvoSuite的幾種狀況

例1:以Example 1:被測試內容demoTwoService.java

爲例,查看本類調用生成測試用例狀況

被測試內容以下:

            
              
            
            
             
             
                      
             
             

生成測試用例

(由於本類2個方法,只截取Test方法的用例):

運行Test方法的用例:

很明顯的是Test調用本類的Math方法,但生成的測試用例

卻少了一條 b=0的狀況。

覆蓋率爲84%

例2:不在同一個類調用方法

生成測試用例:

運行結果:

就生成用例與結果看來,未有a=0 與b=0的狀況,

而是以結果爲正數,負數,0

覆蓋率:

測試用例的生成通常以被生成的方法的結果爲導向,

會將被測方法的每種if與輸出結果的狀況進行覆蓋。

但不會全面覆蓋方法中調用的方法。生成的測試

例只能輔助測試,並不能徹底取代人工,

測試用例的正確與否還需人工判斷。


 
               
點個「在看」支持一下👇
使用插件進行生成測試用例publicclass demoTwoService {publicintMath(int a, int b) {if(a == 0) {System.out.println("運行1");return a;} elseif(b == 0) {System.out.println("運行2");return0;} else{System.out.println("運行3");return a/b;}}查看控制檯:根據參數生成了執行命令查看生成用例結構與maven命令行生成同樣publicclass TEST {publicintMath(int a, int b) {if(a == 0) {System.out.println("運行1");return0;} elseif(b == 0) {System.out.println("運行2");return b;} else{System.out.println("運行3");return a / b;}}publicintTest(int a, int b) {int aa = this.Math(a, b);System.out.println("結果"+ aa);return aa;}}



本公衆號所有原創已整理成一個專欄,請在公衆號裏回覆「 測試開發 」獲取!


本文分享自微信公衆號 - 測試開發社區(TestDevHome)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索