轉載原文出處:http://suhuanzheng7784877.iteye.com/blog/1082339
1. 測試簡介
這裏所說的測試主要是指單元測試,一般說Java的單元測試都知道有個Junit。確實目前很多公司,無論什麼行業,基本都是使用junit進行單元測試,一般銀行、電信、股票項目每個功能類都必須有相應的單元測試類,而且測試用例也是極其苛刻的。而且每一行代碼都需要有log追蹤。生成的測試報告也要成爲相應的成果物交與甲方。稍微差一點的,單元測試也就是一個形式,因爲很多情況(由以國內政務項目爲主)都是業務邏輯集成UI功能都做完了,之後再回去補單元測試,其實是爲了應付甲方合同中的測試報告。話說多了,偏離了主題。Maven構建項目的時候可以執行我們的單元測試,底層是調用了Maven的插件maven-surefire-plugin執行單元測試用例。
2. 新模塊的需求與開發
再展示Maven的測試功能之前,我們先來開發一個新的模塊,隨機驗證碼的功能模塊。隨機驗證碼我們在網上都用過,在此不再詳細說了,直接看代碼即可。此處用到了一個google開源的組件。這個在筆者的另一篇blog
http://suhuanzheng7784877.iteye.com/blog/1076066中有介紹,在此不再贅述。
先來看生成隨機數業務代碼
AccountImageUtil
package com.liuyan.account.mail;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Random;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
public class AccountImageUtil {
static DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
static Map<Integer, String> map;
static int key = 0;
static Random random;
static {
defaultKaptcha.setConfig(new Config(new Properties()));
map = new HashMap<Integer, String>();
random = new Random();
}
public static String generateText() {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 4; i++) {
int a = random.nextInt(10);
sb.append(a);
}
map.put(key, sb.toString());
key++;
return sb.toString();
}
}
以上業務輔助類初始化了圖片生成組件,之後調用隨機函數類生成四位的隨機數。
再來看看生成圖片的類AccountImageServiceImpl,接口不再給出了
這個類就是調用輔助類生成圖片的。下面我們編寫單元測試。
3. 新模塊的測試
AccountImageUtilTest代碼如下
AccountImageServiceImplTest如下
之後在控制檯運行如下指令
mvn test
之後效果如下
運行報告是junit自己的報告輸出,和咱們在Eclipse運行的報告差不多。以上代表運行了3個用例,和預期效果不符的是0個,失敗的用例是0個,忽略的用例數是0個。
如果需要跳過單元測試,則可以運行如下命令
大家可能要問,爲何Maven能夠自己尋找我們編寫的測試類呢?其實還是那句約定大於配置。Maven自動去尋找src/test/java下面的類,當此文件夾下面的類符合以下規範,那麼Maven默認認爲他們是單元測試用例類。
Test*.java:任何目錄下以Test爲開始的類
*Test.java: 任何目錄下以Test爲結尾的類
*TestCase.java: 任何目錄下以TestCase爲結尾的類。
如果想在一段時間內節省項目構建時間,暫時全部忽略單元測試。那麼可以在pom.xml中配置如下
等到項目完全開發完了,需要測試用例的時候將其註釋掉即可。
本個模塊有兩個測試用例類,如果僅僅想運行一個測試用例該怎麼辦。運行下面命令
這個是指定具體運行哪個測試用例。當然需要將pom文件中忽略測試用例的配置註釋掉。
也可以測試多個測試用例
也可以使用模糊匹配進行測試
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<excludes>
<exclude>**/AccountImageUtilTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
includes是需要測試的類,excludes是要排除之外測試用例。可以使用模糊匹配。**用來匹配任意件路經,*匹配任意類。
4. 測試報告
基本的測試報告上面已經介紹過了,下面我們看看測試覆蓋率的報告。運行如下命令
在target文件夾下出現了一個site目錄,下面是一個靜態站點,裏面就是單元測試的覆蓋率報告。
5. 總結
這次我們介紹了Maven的測試,可以運行項目的單元測試用例,並生成報告。使用者可以根據自己的需要配置測試選項以滿足項目的測試需求。最後說一下,測試十分重要,往往大手筆的產品測試人員和開發人員的比例是2:1。