IntelliJ IDEA單元測試+SpringMvc單元測試
Intellij idea + Junit 單元測試
原文連結:http://blog.csdn.net/u011138533/article/details/52165577
本文按以下順序講解JUnit4的使用
- 下載jar包
- 單元測試初體驗
- 自動生成測試類
- 執行順序
- @Test的屬性
- 程式碼覆蓋率
下載jar包
在github上,把以下兩個jar包都下載下來。下載地址:點選開啟連結
下載junit-4.12.jar,junit-4.12-javadoc.jar(文件),junit-4.12-sources.jar(原始碼)。
下載hamcrest-core-1.3.jar,hamcrest-core-1.3-javadoc.jar(文件),hamcrest-core-1.3-sources.jar(原始碼)。
最前面那個pom是Maven的配置檔案,如果你需要的話也下載下來。
單元測試初體驗
先建立個簡單的專案體驗下單元測試是怎麼一回事吧。
我建立一個專案叫JUnit4Demo,剛建立好的工程目錄如下圖,然後在External Libraries中匯入剛下載的那兩個jar包。
通過Libraries新增Jar包
1.開啟 File -> Project Structure ->Modules-> 在Dependencies 下新增jar包
2、+ -> Library... -> java -> 選擇jar的路徑新增。 新增jar包後如下圖所示。
3、建立一個類com.hera.util.Math,然後輸入一個求階乘的方法:
4、建立一個隊Math方法的單元測試:
建立一個和src同級別的資料夾叫test(邏輯程式碼放src裡,測試程式碼放test裡是個好習慣)。
接著在IntelliJ IDEA裡還要把這個test資料夾要設定成測試檔案的根目錄,右鍵選中
Mark Directory As - Test Sources Root。
建立一個測試類:
IntelliJ IDEA提供了一個快捷操作Cmd + Shift + T作為類和測試之間的導航。同時允許使用者在那裡建立一個測試類。IntelliJ IDEA提供了一個快捷操作Cmd + Shift + T作為類和測試之間的導航。同時允許使用者在那裡建立一個測試類。
為測試類MathTest新增測試方法:
執行: run MathTest 。右下方一條綠色條說明測試通過,如果把120改成別的數字那麼就會測試不通過顯色紅色條。JUnit4有一句話叫:“keeps the bar green to keep the code clean”。
解釋一下MathTest,就六個地方要講:
第一,匯入了org.junit.Test;和org.junit.Assert.*;這兩個包,注意後者是靜態匯入import static。
第二,testFactorial是在要測試的方法名Factorial前加個test(這也是個好習慣)。
第三,所有測試方法返回型別必須為void且無引數。
第四,一個測試方法之所以是個測試方法是因為@Test這個註解。
第五,assertEquals的作用是判斷兩個引數是否相等,例子中120是預期結果,new Math().factorial(5)是實 際結果。但是通常不應該只比較一個值,要測試多幾個特殊值,特別是臨界值。
例如Math().factorial(0)和Math().factorial(-1)等。
第六,assertEquals除了比較兩個int,還過載了好多次可以比較很多種型別的引數。而且JUnit4包含一堆 assertXX方法,assertEquals只是其中之一,這些assertXX統稱為斷言。剛不是下載了junit-4.12- javadoc.jar這個文件嗎,解壓後開啟index.html如下圖還有一堆斷言。
執行順序
JUnit4利用JDK5的新特性Annotation,使用註解來定義測試規則。
這裡講一下以下幾個常用的註解:
- @Test:把一個方法標記為測試方法
- @Before:每一個測試方法執行前自動呼叫一次
- @After:每一個測試方法執行完自動呼叫一次
- @BeforeClass:所有測試方法執行前執行一次,在測試類還沒有例項化就已經被載入,所以用static修飾
- @AfterClass:所有測試方法執行完執行一次,在測試類還沒有例項化就已經被載入,所以用static修飾
- @Ignore:暫不執行該測試方法
我們來試驗一下,我新建一個測試類AnnotationTest,然後每個註解都用了,其中有兩個用@Test標記的方法分別是test1和test2,還有一個用@Ignore標記的方法test3。然後我還建立了一個構造方法,這個構造方法很重要一會會引出一個問題。
具體程式碼如下:
package com.xuhongchuan.util;
import org.junit.*;
import static org.junit.Assert.*;
/**
* Created by xuhongchuan on 2015/7/18.
*/
public class AnnotationTest {
public AnnotationTest() {
System.out.println("構造方法");
}
@BeforeClass
public static void setUpBeforeClass() {
System.out.println("BeforeClass");
}
@AfterClass
public static void tearDownAfterClass() {
System.out.println("AfterClass");
}
@Before
public void setUp() {
System.out.println("Before");
}
@After
public void tearDown() {
System.out.println("After");
}
@Test
public void test1() {
System.out.println("test1");
}
@Test
public void test2() {
System.out.println("test2");
}
@Ignore
public void test3() {
System.out.println("test3");
}
}
執行結果如下:
BeforeClass 構造方法 Before test1 After 構造方法 Before test2 After AfterClass解釋一下:@BeforeClass和@AfterClass在類被例項化前(構造方法執行前)就被呼叫了,而且只執行一次,通常用來初始化和關閉資源。@Before和@After和在每個@Test執行前後都會被執行一次。@Test標記一個方法為測試方法沒什麼好說的,被@Ignore標記的測試方法不會被執行,例如這個模組還沒完成或者現在想測試別的不想測試這一塊。
以上有一個問題,構造方法居然被執行了兩次。所以我這裡要說明一下,JUnit4為了保證每個測試方法都是單元測試,是獨立的互不影響。所以每個測試方法執行前都會重新例項化測試類。
我再給你看一個實驗:
新增一個成員變數
int i = 0;
然後把test1改為:
i++;
System.out.println("test1的i為" + i);
test2改為:
i++;
System.out.println("test2的i為" + i);
執行結果:
BeforeClass 構造方法 Before test1的i為1 After 構造方法 Before test2的i為1 After AfterClass
可以看到test1和test2的i都只自增了一次,所以test1的執行不會影響test2,因為執行test2時又把測試類重新例項化了一遍。如果你希望test2的執行受test1的影響怎麼辦呢?把int i改為static的唄。
最後關於這些註解還有一個要說明的就是,你可以把多個方法標記為@BeforeClass、@AfterClass、@Before、@After。他們都會在相應階段被執行。
@Test的屬性
最後來說一下@Test的兩個屬性
- excepted
- timeout
excepted屬性是用來測試異常的,我們回到Math類,拿其中的求階乘方法factorial()來說。如果傳進來一個負數我們是希望丟擲異常的,那要測試會不會拋異常怎麼辦呢?
我在測試類MathTest新增一個測試方法:
然後說下timeout屬性,這個是用來測試效能的,就是測試一個方法能不能在規定時間內完成。
回到Math類,我建立一個數組排序的方法,用的是氣泡排序。
public void sort(int[] arr) { //氣泡排序 for (int i = 0; i < arr.length - 1; i++) { //控制比較輪數 for (int j = 0; j < arr.length - i - 1; j++) { //控制每輪的兩兩比較次數 if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }然後偶在測試類MathTest建立測試方法,隨機生成一個長度為50000的陣列然後測試排序所用時間。timeout的值為2000,單位和毫秒,也就是說超出2秒將視為測試不通過。
@Test(timeout = 2000) public void testSort() throws Exception { int[] arr = new int[50000]; //陣列長度為50000 int arrLength = arr.length; //隨機生成陣列元素 Random r = new Random(); for (int i = 0; i < arrLength; i++) { arr[i] = r.nextInt(arrLength); } new Math().sort(arr); }執行結果測試不通過,且提示TestTimedOutException。 那怎麼辦,修改程式碼提升效能唄。回到Math方法改為下sort()。這次我用快速排序,程式碼如下:
public void sort(int[] arr) { //快速排序 if (arr.length <= 1) { return; } else { partition(arr, 0, arr.length - 1); } } static void partition(int[] arr, int left, int right) { int i = left; int j = right; int pivotKey = arr[left]; //基準數 while (i < j) { while (i < j && arr[j] >= pivotKey) { j--; } while (i < j && arr[i] <= pivotKey) { i++; } if (i < j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } if (i != left) { arr[left] = arr[i]; arr[i] = pivotKey; } if (i - left > 1) { partition(arr, left, i - 1); } if (right - j > 1) { partition(arr, j + 1, right); } }然後再執行一下測試類MathTest,綠色條出現了,測試通過妥妥的。
編輯測試設定
我們可以通過Run → Edit Configurations或工具欄上的標籤來調整我們的測試執行配置。
在Configuration選項卡,使用者可以選擇需要執行的測試。例如,您可以從一個類、程式包、測試套件或甚至模式中執行所有的測試。這裡的Fork模式讓使用者在一個單獨的程序執行每個測試。
在程式碼覆蓋標籤你可以調整覆蓋率設定。目前IntelliJ IDEA支援兩種測量覆蓋率引擎。預設情況下它使用自己的引擎,當然使用者也可以選擇JaCoCo引擎。使用者也可以在這裡選擇覆蓋率模式。Tracing{span{ mode模式會增加消耗,但測量會更精確。
執行覆蓋
收集覆蓋率,使用者需要通過Run → Run 'MyClassTest' with Coverage或工具欄上的選項執行特定模式的測試。
當覆蓋模式執行至少一個測試之後,IDE將會在Project工具視窗顯示每個程式包、類的覆蓋率資料,同時在Coverage工具窗和編輯器中也會顯示。
編輯器中的覆蓋率
如果使用者新增另一個方法到MyClass,並執行覆蓋率測MyClass,就會發現,沒有被測試覆蓋到的程式碼都將高亮顯示為紅色。覆蓋的程式碼顏色則是綠色。如果一些程式碼是隻覆蓋部分,那沒將顯示為黃色。
Springmvc單元測試
原文連結:http://blog.csdn.net/sinat_28729797/article/details/50177083
若為Maven專案
1、首先得支援junit及spring-test jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
2、進行單元測試類配置
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml","classpath:springmvc-servlet.xml"})
public class UserTest extends AbstractJUnit4SpringContextTests{
//注入測試類
@Autowired
private IUserDao userDao;
@Resource(name = "userDaoImpl")
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
@Test
public void testDoInsert() throws Exception {
User user = new User();
user.setId("...............")
......................
//要測試的方法
userDao.Insert(user);
}
}
3、右鍵執行單元測試,就OK了
相關推薦
IntelliJ IDEA單元測試+SpringMvc單元測試
Intellij idea + Junit 單元測試 原文連結:http://blog.csdn.net/u011138533/article/details/52165577 本文按以下順序講解JUnit4的使用 下載jar包單元測試初體驗自動生成測試類執行順序@T
【轉載】IntelliJ IDEA配置JUnit進行單元測試
dbd ima pom.xml format height eight nsh 格式 oot 前提條件 安裝JDK,並配置好環境變量 工程已解決JUnit依賴關系(pom.xml) IDEA中JUnit配置 IDEA自帶一個JUnit插件,打開Settings窗口搜
IntelliJ IDEA找不到單元測試程式碼覆蓋率預設工具,沒有Coverage選項卡
1、我們使用Java開發工具IntelliJ IDEA,有時候使用單元測試工具Junit後,要進行程式碼覆蓋率報告輸出,可使用IDEA自帶的程式碼覆蓋率工具,直接測試類名右鍵Run ‘MyClassTest’ with Coverage或工具欄上的選項執行特定模式的測試,如下 2、但是發現
IntelliJ IDEA使用Junit進行單元測試
針對MAVEN工程中進行Junit進行單元測試 1、在src目錄先建立一個和main同等級的資料夾 2、然後右鍵test資料夾,設定為測試專用資料夾,然後在在下面建立一個java目錄路徑,根據main資料夾程式碼的路徑建立對用的多級目錄 3、然後進入類中建立對應的Test類 右鍵類名,進
intellij idea 自動生成test單元測試
在要測試的類上按快捷鍵ctrl + shift + t,選擇Create New Test,在出現的對話方塊的下面member內勾選要測試的方法,點選ok 或者點選選單欄Navigate–》test,選擇Create New Test,在出現的對話方塊的下面m
使用IntelliJ IDEA匯入storm-starter並測試WordCountTopology執行出現 A JNI error has occurred的原因和解決
第一次匯入storm包並測試WordCountTopology,出現如下截圖錯誤: 解決方法: 1.檢視POM檔案: 上圖的POM檔案中配置引數為:provided 應改為:compile 如下圖: 再次測試執行,ok了: "C:\Program Fil
SSM框架整合(IntellIj IDEA+Maven+Spring+SpringMVC+MyBatis)之MyBatis
我認為框架整合不熟練的話按照MyBatis->SpringMVC->Spring順序整合比較好,先配置MyBatis是因為不需要額外的配置伺服器,進行單元測試比較容易。Spring是用來進行整合的,所以等其它框架配置好之後進行整合不會顯得很亂。
IntelliJ IDEA新建一個springmvc專案並且匯入java包
1 新建一個spring專案 1 File => New => Project 2 新建spring mvc專案 配置名字SpringMvcDemo 3 匯入spring的jar包 4 這裡匯入spring-framework-4.1.6.RE
Intellij Idea-統一顯示SpringMVC請求和處理方法對映列表
前言 在SpringMVC中請求連結跟處理方法的對映關係因為@RequestMapping分佈在專案的各個方法上,所以不能像Struts那樣統一管理。 Intellij Idea提供了相關的支援; 新增支援 IDEA 控制檯下方預設有Spring
SSM框架整合(IntelliJ IDEA + maven + Spring + SpringMVC + MyBatis)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/P
搭建IntelliJ IDEA+maven+jetty+SpringMVC 開發環境(一)
以前一直使用的是eclipse,偶爾使用myeclipse,現在由於工作需要,正在使用idea。因為也是剛接觸這個開發工具,處於摸索階段,趁著學習寫了一篇環境搭建部落格,與大家一起分享一下。 一、新建專案 1、開啟idea工具,選擇新建專案file-> new -> project。選擇ma
IntelliJ IDEA建立Web SpringMVC專案(一):建立Maven Web專案
1.create project 2.選擇maven web 3.groupid artifactId設定 4.設定maven Properties中新增一個引數archetypeCatalog=internal,不加這個引數,在maven生成骨架的時
IntelliJ IDEA 建立Spring+SpringMVC+mybatis+maven專案
第一步: 建立maven專案 輸入專案名和工程id 選擇maven 預設就可以了 剛開始時間比較長,可以看到,用了有7分多鐘, 還是很快的 maven包下載好後
Junit 單元測試在 intelliJ IDEA 中的安裝
repo setting 進入 安裝 junit sta rain pos 每次 1.為什麽使用Junit我們都知道,main 方法是一個程序的入口,通常來說,沒有main方法,程序就無法運行。我們經常會寫一些class文件(如下圖所示),他們並沒有自己的main方法。那麽
Intellij IDEA使用junit單元測試及其junit與spring版本不相容問題
下面是我在建立springboot測試類中的說明和遇到的問題 建立好了測試類後 1.測試service層測試類需要加上註解:@Runwith,@SpringBootTest 2.測試Contro
初識IntelliJ IDEA下JUnit單元測試
由於之前進行單元測試時,沒有用JUnit測試框架,逐步接觸到其後,它的功能實在是太強大了。本文主要初步介紹如何在IntelliJ IDEA上簡單使用JUnit。在Android Studio上建立module時,會自動幫助我們建立測試類: 下面也按照此在Intell
Intellij idea如何做單元測試 JUnit3
1,使用預設引數新建一個maven工程,工程目錄如下圖所示: 2,在pom.xml中新增依賴: <dependency> <groupId>junit</groupId>
SpringMVC 單元測試
-a 自動 art num number .class 進行 啟動服務 bsp 參考鏈接:https://blog.csdn.net/bestfeng1020/article/details/70145433 用Spring管理的項目,在不啟動服務的情況下進行測試類測試:@
MockMvc - SpringMVC單元測試的獨立測試
大家推薦個靠譜的公眾號程式設計師探索之路,大家一起加油,這個公眾號已經接入圖靈 一、簡介 為何使用MockMvc? 對模組進行整合測試時,希望能夠通過輸入URL
MockMvc詳解——SpringMVC單元測試
★ MockMvc - SpringMVC單元測試的獨立測試: 一、簡介 為何使用MockMvc? 對模組進行整合測試時,希望能夠通過輸入URL對Controller進行測試,如果通過啟動伺服器,建立http client進行測試,這樣會使得測試變得很麻煩