易于使用的單位和集成代碼

此示例說明如何使用Maven和Sonar生成單元測試和集成測試的覆蓋率。 它使用非常簡單的技術,只需10-15分鐘即可在任何現有的Maven構建中運行。 它可用于單元,集成,ATDD或任何其他類型的測試套件。 覆蓋率結果顯示在Sonar中。

有什么事嗎?

我的前一篇文章展示了如何使用JUnit類別輕松拆分單元和集成測試套件。
http://johndobie.blogspot.com/2012/04/unit-and-integration-tests-with-maven.html

下一步的邏輯步驟是能夠查看每個測試套件的指標。
本示例說明了如何使用Jacoco和Sonar進行此操作。

示例代碼在這里。

svn co https://designbycontract.googlecode.com/svn/trunk/examples/maven/categories-sonar
mvn clean install sonar:sonar

聲納

此示例依靠Sonar來顯示代碼覆蓋率指標。 Sonar是一個狂熱的開源代碼質量工具,每個人都應該看看。
http://www.sonarsource.org/

對于我們的示例,需要進行幾個簡單的配置更改。
以下鏈接顯示了如何安裝Sonar并進行更改
http://johndobie.blogspot.com/p/setting-up-sonar.html

拆分測試套件。

此示例依靠JUnit類別來劃分測試。

我們定義一個標記器接口,然后將其應用于我們想要拆分的測試。

public interface IntegrationTest {}

類別注釋將添加到您的測試類中。 它采用新界面的名稱。

import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{@Testpublic void longRunningServiceTest() throws Exception {}
}

整個過程非常簡單,并在此處進行了詳細說明
http://johndobie.blogspot.com/2012/04/unit-and-integration-tests-with-maven.html

分析代碼覆蓋率

我們使用jacoco插件進行代碼覆蓋。 這里有Jacoco的概述。
http://johndobie.blogspot.com/2012/01/unit-test-code-coverage.html
我們首先定義jacoco coverage文件的目錄。

<coverage.reports.dir>${basedir}/target/coverage-reports
</coverage.reports.dir>
<sonar.jacoco.reportPath>${coverage.reports.dir}/jacoco-unit.exec
</sonar.jacoco.reportPath>
<sonar.jacoco.itReportPath>${coverage.reports.dir}/jacoco-it.exec
</sonar.jacoco.itReportPath>
<sonar.jacoco.jar>${basedir}/lib/jacocoagent.jar
</sonar.jacoco.jar>

配置單元測試

然后,我們通過運行標準的surefire插件(其中Jacoco代理指向$ {sonar.jacoco)來啟動單元測試 reportPath} 。 這用于存儲單元測試代碼覆蓋率結果。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.7.2</version>
<configuration><argLine>-javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.reportPath},includes=com.*</argLine><includes><include>**/*.class</include></includes><excludedGroups>com.test.annotation.type.IntegrationTest</excludedGroups>
</configuration>
</plugin>

我們忽略以下配置的任何標記的集成測試

<excludedGroups>com.test.annotation.type.IntegrationTest</excludedGroups>

配置集成測試

對于集成測試,我們使用故障保護插件,并將Jacoco代理指向$ {sonar.jacoco。 itReportPath} 。 這用于存儲集成測試代碼覆蓋率結果。

<plugin>
<plugin><artifactId>maven-failsafe-plugin</artifactId><version>2.12</version><dependencies><dependency><groupId>org.apache.maven.surefire</groupId><artifactId>surefire-junit47</artifactId><version>2.12</version></dependency></dependencies><configuration><groups>com.test.annotation.type.IntegrationTest</groups></configuration><executions><execution><goals><goal>integration-test</goal></goals><configuration><argLine>-javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.itReportPath},includes=com.*</argLine><includes><include>**/*.class</include></includes></configuration></execution></executions>
</plugin>

我們還告訴插件使用正確的JUnit類別

<configuration><groups>com.test.annotation.type.IntegrationTest</groups>
</configuration>

運行這些文件時,它們將生成以下2個覆蓋文件。

開始聲納

在運行構建之前,您需要啟動Sonar服務器。
http://johndobie.blogspot.com/p/setting-up-sonar.html

運行示例

我們可以使用以下命令運行全部

mvn clean install sonar:sonar

如果瀏覽到聲納實例,您將看到以下結果。

參考: Agile Engineering Techniques博客上的JCG合作伙伴 John Dobie提供的Easy Unit和Integration Code Coverage 。


翻譯自: https://www.javacodegeeks.com/2012/05/easy-unit-and-integration-code-coverage.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373168.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373168.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373168.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Dij的堆優化

#include<algorithm> #include<iostream> #include<cstdio> #include<cstring> #include<queue> #define M 100000 #define pa pair<int,int>//優先比較第一個元素 using namespace std; int d[M],n,m,cnt,head[M],next[M],u[M],dis[M],n…

linux db2sysc 內存,db2sysc進程占用linux內存持續增長,請各位指點。

該服務器近期做過的變更情況&#xff1a;變更前&#xff0c;使用 sar -r 1 3 看內存使用率服務器內存使用率一直是70%該服務器原為獨立物理服務器&#xff0c;經過虛擬化遷移到EXS上成為虛擬服務器。遷移后發現swap無法啟動。原因是原物理服務器硬盤控制器為cciss。/etc/fstab …

k8s的探針

一、探針原理 分布式系統和微服務體系結構的挑戰之一是自動檢測不正常的應用程序&#xff0c;并將請求&#xff08;request&#xff09;重新路由到其他可用系統&#xff0c;恢復損壞的組件。健康檢查是應對該挑戰的一種可靠方法。使用 Kubernetes&#xff0c;可以通過探針配置運…

第一百三十節,JavaScript,封裝庫--連綴

JavaScript&#xff0c;封裝庫--連綴 學習要點&#xff1a; 1.連綴介紹 2.改寫庫對象 本章我們重點來介紹&#xff0c;在調用庫的時候&#xff0c;我們需要能夠在前臺調用的時候可以同時設置多個操作&#xff0c;比如設置CSS&#xff0c;設置innerHTML&#xff0c;設置click事件…

Spring3:類型安全依賴項注入

在從Spring跳到類型安全依賴注入之前&#xff0c;我想討論一下我們之前所做的方式。 我們一直在借助Spring的Autowired注釋按類型使用依賴項注入。 像這樣的東西會注入Spring Bean。 Autowired private StudentDao studentDao; // Autowires by type. Injects the instance who…

userData IE

蠻討厭IE的&#xff0c;因為他常常需要特別照顧&#xff0c;就像DOM Storage(sessionStorage和localStorage)只能支持IE8&#xff0c;對于以下的只能使用userData。 原理&#xff1a;通過在document元素后面附加一個專屬的“DHTML行為”來實現客戶端存儲&#xff0c; var memor…

context元素大概解說

Context元素代表一個web應用&#xff0c;運行在某個特定的虛擬主機上。如Servlet Specification 2.2或以后版本中描述的那樣&#xff0c;每個web應用基于一個Web Application Archive(WAR)文件&#xff0c;或者是一個目錄&#xff0c;包含WAR文件解壓后的內容。有關Web Applica…

全新的Play模塊資料庫

去年11月&#xff0c;我曾與Play框架的 Nicolas Leroux談過創建模塊存儲庫的問題。 他同意這將是一個好主意&#xff0c;但是時間不足使我無法開始。 在上周Google Play小組發生了暴風雨之后&#xff0c;我決定將其優先處理。 可以在幾周內提供可工作的原型。 概述&#xff1a;…

Ubuntu 16.04 安裝 VMware-Workstation-12

以前一直使用 Ubuntu Virtaulbox &#xff0c;最近測試了 VMware-Workstation-9,性能超過 Virtaulbox-4.2.x,下面是詳細步驟:1 首先準備一個Ubuntu 系統 lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04 LTS Release: 16.04 …

Linux的md64進程,在Linux上安裝Elasticsearch Kibaba.md(示例代碼)

在Linux上安裝Elasticsearch KibabaKibana是一個開源為elasticsearch 引擎提供數據和數據分析1、下載安裝切換到root賬戶&#xff0c;按順序依次執行以下命令rpm包安裝$wget -c https://artifacts.elastic.co/downloads/kibana/kibana-5.5.3-x86_64.rpm$sha1sum kibana-5.3.2-x…

SSH實戰 · 唯唯樂購項目(中)

用戶模塊三&#xff1a;一級分類的查詢創建一級分類表并導入基本數據CREATE TABLE category (cid int(11) NOT NULL AUTO_INCREMENT,cname varchar(255) DEFAULT NULL,PRIMARY KEY (cid)) ENGINEInnoDB AUTO_INCREMENT11 DEFAULT CHARSETutf8;建包及相應的類:com.weiwei.shoppi…

播放2 –模塊,插件有什么區別?

關于Play 2模塊和插件似乎有些混亂。 我想這是因為兩者經常是同義詞。 在Play&#xff08;兩個版本-1和2&#xff09;中&#xff0c;存在明顯的差異。 在本文中&#xff0c;我將介紹什么是插件&#xff0c;如何在Java和Scala中實現插件&#xff0c;以及如何從模塊導入插件。 外…

Linux多線程貝葉斯建樹教程,建樹經驗.doc

建樹經驗分子進化樹構建及數據分析的簡介mediocrebeing, rodger, lylover, klaus, oldfish, yzwpf一、引言開始動筆寫這篇短文之前&#xff0c;我問自己&#xff0c;為什么要寫這樣的文章&#xff1f;寫這樣的文章有實際的意義嗎&#xff1f;我希望能夠解決什么樣的問題&#x…

Android的IPC機制(一)——AIDL的使用

綜述 IPC(interprocess communication)是指進程間通信&#xff0c;也就是在兩個進程間進行數據交互。不同的操作系統都有他們自己的一套IPC機制。例如在Linux操作系統中可以通過管道、信號量、消息隊列、內存共享、套接字等進行進程間通信。那么在Android系統中我們可以通過Bin…

python學習筆記(python介紹)

為什么要學python&#xff1f; python和shell的比較&#xff0c;和PHP、和JAVA比較 運維開發只是用到python的很小一部分 python在一些知名公司的應用&#xff1a; 谷歌&#xff1a;python的創始人原來在谷歌工作。 CIA&#xff1a;美國中情局網站用python開發的 NASA&#xff…

Netty:透明地使用SPDY和HTTP

大多數人已經從谷歌那里聽說過SPDY&#xff0c;該協議被提議作為老化的HTTP協議的替代品。 Web服務器是瀏覽器正在緩慢地實現該協議&#xff0c;并且支持正在增長。 在最近的文章中&#xff0c;我已經寫過SPDY的工作方式以及如何在Jetty中啟用SPDY支持。 由于Netty&#xff08;…

selenium 等待頁面加載完成

一、隱形加載等待&#xff1a; file:///C:/Users/leixiaoj/Desktop/test.html 該頁面負責創建一個div <html> <head><title>Set Timeout</title><style>.red_box {background-color: red; width 20%; height:100px; border: none;}</style&…

linux nfsnobody用戶,處理CentOS 5.5 x64 配置NFS服務過程中nfsnobody用戶造成的問題

4、我們編譯一下這個NFS的配置文件。[rootNFS /]# vi /etc/exports/share 192.168.60.0/24(rw,sync,all_squash,root_squash) (我們允許這個共享對192.168.60.0/24網段可讀可寫&#xff0c;且將所有訪問者包括root的身份都改為nfsnobody)[rootNFS /]# /etc/init.d/nfs resta…

計算機語言

軟件&#xff1a;是一系列按照特定順序組織的計算機數據和指令的集合。一般來講軟件被劃分為系統軟件、應用軟件和介于這兩者之間的中間件。 系統軟件 系統軟件是各類操作系統&#xff0c;如windows、Linux、UNIX等&#xff0c;還包括操作系統的補丁程序及硬件驅動程序&#xf…

Apache Shiro第2部分–領域,數據庫和PGP證書

這是致力于Apache Shiro的系列文章的第二部分。 我們從簡單的不安全Web應用程序開始了上一部分 。 完成后&#xff0c;該應用程序具有基本的身份驗證和授權。 用戶可以登錄和注銷。 所有網頁和按鈕均已分配和實施訪問權限。 授權和身份驗證數據都已存儲在靜態配置文件中。 正如…