EvoSuie的代碼覆蓋報告

1、簡要介紹java

  • EvoSuite開源工具能夠基於Eclipse進行測試用例的自動生成,生成的測試用例符合Junit標準(直接生成可進行Junit的java文件),知足分支覆蓋(即斷定覆蓋)|
  • Evosuite分爲Eclipse插件使用和命令行兩種使用方法,推薦使用命令行。如下會詳細說明

圖片描述

生成的測試cases的運行依賴框架

由EvoSuite生成的測試cases須要EvoSuite框架的runtime包支持才能進行測試,所以要在工程中加入以下的Maven依賴工具

<dependency>

  <groupId>org.evosuite</groupId>

  <artifactId>evosuite-standalone-runtime</artifactId>

  <version>1.0.6</version>

  <scope>test</scope>

</dependency>

注意:EvoSuite的bytecode instrumentation和相似Jacoco這類工具在bytecode instrumentation上有可能有衝突,致使最後的覆蓋率統計都是0性能

bytecode instrumentation是改變了編譯器上生成的一個類的bytecode,用它能夠完成如:計算一個方法被執行須要多長時間、改變它的執行流程等特別的流程。用戶能夠添加/改變應用程序的字節碼,自從有了這個功能後,就不須要修改整個應用程序源。

EvoSuite的字節碼檢測學習

在EvoSuite的bytecode instrumentation有兩種選擇以下:測試

其1、在EvoSuite的 @RunWith(EvoRunner.class)中,會調用EvoSuite本身的classloader,而在這個過程當中就調用它本身提供的bytecode instrumentation來完成對應的分析。這就致使了EvoSuite的bytecode instrumentation是早於其餘代碼覆蓋工具完成。ui

其2、EvoSuite會啓動一個Java的代理,代理會攔截所有的class loading,而後加入其EvoSuie的bytecode instrumentation。spa

EvoSuite目前默認是第一種,可是若是可使用第二種,測者建議使用第二種,由於第二種能夠有效避免和相似Jacoco工具的bytecode instrumentation的衝突,可是若是在測試在代理啓動前就執行了,那麼就不會起做用了範圍會報EvoSuite的錯誤。插件

在使用過程當中,若是發現代碼覆蓋報告所有是0,能夠嘗試經過一下方式切換上面的兩種bytecode instrumentation方式。命令行

@RunWith(EvoRunner.class) 
@EvoRunnerParameters(mockJVMNonDeterminism = true, 
useVFS = true, useVNET = true, resetStaticState = true, 
separateClassLoader = true, useJEE = true)

修改separateClassLoader = true爲false(從方式1 變成方式2),若是一切自效果,那麼能夠再Maven的pom中加入對應的配置:
`<configuration>

<extraArgs> -Duse_separate_classloader=false </extraArgs>
</configuration>`

結語:

若是須要相關學習資料的朋友能夠加個人qq羣:903217991,裏面有小夥伴爲你們整理好的自動化,接口,性能等等的學習資料,也可一塊兒交流學習,人生如同逆水行舟,不進則退,我們一塊兒加油努力吧!

相關文章
相關標籤/搜索