JUnit學習之hamcrest、testSuite介紹及測試原則

[轉自] http://huihai.iteye.com/blog/1994270


上一節說了junit的一些基本概念,主要使用assert做一些基本的判斷。但很多時候使用assert做判斷,并不方便,如果要判斷某幾個值是否為true或false,這時使用hamcrest來判斷就會方便許多。hamcrest就是專門為增強junit來提供的框架。它可以有效的使用一些語義比較清楚的名字來做判斷,一些常用的方法如下:

1、下面使用hamcrest在上一節的例子上繼續操作。使用junit中的assertThat進行斷言,第一個參數為實際值,第二個參數為hamcrest的表達式。

在上一節的測試類TestCalcuate中,先靜態導入hamcrest包中的Matchers類,如下圖:

?

2、添加下圖所示的測試方法,在測試方法testHamcrest方法中,把junit與hamcrest結合使用,方法assertThat方法是junit的方法,greaterThan方法是hamcrest的方法,greaterThan判斷第一個參數是否>第二個參數,這里就是判斷50是否大于20。

?

?

3、如果要判斷第一個參數是否大于20,并且小于60,這時可以使用正面的方式:

?
?

?

4、這時使用junit進行測試,如果測試通過,代表50確實大于49,小于60,如果出現如下錯誤:

?

5、其原因是因為資源路徑里junit的jar包在hamcrest的jar包上面,java運行環境先從junit包中查找allOf方法,但是這里使用的是hamcrest的allOf方法。從資源路徑里把兩個包的路徑換一下就可以了。如下圖,選擇hamcrest的jar包點擊up,就可以反hamcrest的jar包放在junit的jar包的上面,java運行環境就會優先從hamcrest包中查allOf方法。

?

?

6、使用hamcrest還可以判斷一個字符串是否以某個字符串開始或結尾。

?
?

?

7、在一個項目中,可能有很多的測試類,如果每個測試類都要點擊運行,那么成百上千個類都需要測試,這會是個比較繁重的工作,這時可以使用可以使用junit的jar包中提供的Suite來解決這個問題,上面的例子中只有一個測試類名叫TestCalcuate,現在新建兩個測試類,分別為TestA、TestB,如下所示:

    package cn.whp.util;  import org.junit.Test;  public class TestA {  @Test  public void testA(){  System.out.println("TestA");  }  }  
    package cn.whp.util;  import org.junit.Test;  public class TestB {  @Test  public void testB(){  System.out.println("TestB");  }  }  
?

?8、然后新建一個測試類TestSuite,這個類可以把以上三個類,TestCalcuate、TestA、TestB,這三個測試方法同事進行測試。如下所示,

@RunWith(Suite.class)//代表以Suite來運行這個測試類
@SuiteClasses({TestA.class,TestB.class,TestCalcuate.class})//代表要測試的類有哪些。?

    package cn.whp.util;  import org.junit.runner.RunWith;  import org.junit.runners.Suite;  import org.junit.runners.Suite.SuiteClasses;  @RunWith(Suite.class)  @SuiteClasses({TestA.class,TestB.class,TestCalcuate.class})  public class TestSuite {  public void testSuite(){  System.out.println("TestA");  }  }  
?

?如上操作完成后點擊運行,就可以看到所有的測試方法全通過的信息,如下所示:?

?

?

測試原則:

1、建議創建一個專門的source folder--->test來編寫測試類代碼。上面例子就新建一個test的資源包。

2、測試類的包應該保持和需要測試的類一致。上面的例子中Calcuate類在src/cn/whp/util包中,相應的測試類就在test/cn/whp/util中。

3、測試單元中的每個測試方法都必須可以獨立執行,不相互依賴,沒有順序。


轉載于:https://www.cnblogs.com/pekkle/p/6568754.html

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

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

相關文章

Java最佳實踐– Vector vs ArrayList vs HashSet

在使用Java編程語言時,我們將繼續討論與建議的實踐有關的系列文章,我們將在三個最常用的Collection實現類之間進行性能比較。 為了使事情變得更現實,我們將在多線程環境下進行測試,以討論和演示如何將Vector , ArrayLi…

iOS:圖片上傳時兩種圖片壓縮方式的比較

上傳圖片不全面的想法:把圖片保存到本地,然后把圖片的路徑上傳到服務器,最后又由服務器把路徑返回,這種方式不具有擴展性,如果用戶換了手機,那么新手機的沙盒中就沒有服務器返回的圖片路徑了,此時就無法獲取…

7-17 爬動的蠕蟲 (15 分)

一條蠕蟲長1寸,在一口深為N寸的井的底部。已知蠕蟲每1分鐘可以向上爬U寸,但必須休息1分鐘才能接著往上爬。在休息的過程中,蠕蟲又下滑了D寸。就這樣,上爬和下滑重復進行。請問,蠕蟲需要多長時間才能爬出井?…

淺談泛型之泛型方法

實際不用多說只舉2個例子就行: //例1 static void fromArrayToCollection(Object[] a, Collection<?> c) {for (Object o : a) { c.add(o); // 編譯錯誤,錯誤原因也很簡單,<?>是無上下界的通配符泛型,所以編譯器根本無法確認類型} } //例2 static <T> void…

Android特效 五種Toast詳解

Toast是Android中用來顯示顯示信息的一種機制&#xff0c;和Dialog不一樣的是&#xff0c;Toast是沒有焦點的&#xff0c;而且Toast顯示的時間有限&#xff0c;過一定的時間就會自動消失。而且Toast主要用于向用戶顯示提示消息&#xff0c;接下來巴士為大家總結了Android五種To…

Java最佳實踐–高性能序列化

在使用Java編程語言時&#xff0c;我們將繼續討論與建議的實踐有關的系列文章&#xff0c;我們將討論并演示如何將對象序列化用于高性能應用程序。 所有討論的主題均基于用例&#xff0c;這些用例來自于電信行業的關鍵任務超高性能生產系統的開發。 在閱讀本文的每個部分之前…

7-18 二分法求多項式單根 (20 分)

二分法求函數根的原理為&#xff1a;如果連續函數f(x)在區間[a,b]的兩個端點取值異號&#xff0c;即f(a)f(b)<0&#xff0c;則它在這個區間內至少存在1個根r&#xff0c;即f0。 二分法的步驟為&#xff1a; 檢查區間長度&#xff0c;如果小于給定閾值&#xff0c;則停止&a…

java只使用try和finally不使用catch的原因和場景

JDK并發工具包中&#xff0c;很多異常處理都使用了如下的結構&#xff0c;如AbstractExecutorService&#xff0c;即只有try和finally沒有catch。 class X {private final ReentrantLock lock new ReentrantLock();// ...public void m(){lock.lock(); // block until condi…

Java 7:嘗試資源

本文研究try-with-resources語句的用法。 這是一個聲明一個或多個資源的try語句。 資源是一個對象&#xff0c;程序完成后必須將其關閉。 try-with-resources語句可確保在語句末尾關閉每個資源。 任何實現java.lang.AutoCloseable或java.io.Closeable接口的對象都可以用作資源。…

Spring學習(19)--- Schema-based AOP(基于配置的AOP實現) --- 配置切面aspect

Spring所有的切面和通知器都必須放在一個<aop:config>內&#xff08;可以配置包含多個<aop:config>元素&#xff09;&#xff0c;每個<aop:config>包含pointcut&#xff0c;advisor和apsect元素。ps&#xff1a;他們必須按照這個順序進行聲明 <aop:pointc…

2021-10-08

word文檔&#xff1a;.doc .docx 需求文檔、架構文檔、接口文檔、詳設文檔一般都是用word編寫。 Excel表格&#xff1a;.xls、.xlsx’&#xff0c;.csv 測試用例 PPT幻燈片&#xff1a;.ppt、*.pptx 版本不同 可執行文件&#xff08;windows系統&#xff09;&#xff1a; *.exe…

UITableViewCell 選中的狀態小技巧

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {[super setSelected:selected animated:animated]; //cell 沒被選中時 隱藏這個 _leftImageViewself.leftImageView.hidden !selected; //選中text變紅 不然變灰色self.textLabel.textColor selected ? [UICol…

Spring和AspectJ的領域驅動設計

在JavaCodeGeeks主持的上一篇文章中&#xff0c;我們的JCG合作伙伴 Tomasz Nurkiewicz介紹了使用State設計模式進行領域驅動設計的介紹 。 在該教程的最后&#xff0c;他承認他省略了如何將依賴項&#xff08;DAO&#xff0c;業務服務等&#xff09;注入域對象的過程。 但是&am…

BZOJ 3143 HNOI2013 游走 高斯消元 期望

這道題是我第一次使用高斯消元解決期望類的問題&#xff0c;首發A了&#xff0c;感覺爽爽的.... 不過筆者在做完后發現了一些問題&#xff0c;在原文的后面進行了說明。 中文題目&#xff0c;就不翻大意了&#xff0c;直接給原題&#xff1a; 一個無向連通圖&#xff0c;頂點從…

VS2019安全函數scanf_s問題

VS2017、VS2019等安全函數scanf_s問題&#xff1a; scanf()、gets()、fgets()、strcpy()、strcat() 等都是C語言自帶的函數&#xff0c;它們都是標準函數&#xff0c;但是它們都有一個缺陷&#xff0c;就是不安全&#xff0c;可能會導致數組溢出或者緩沖區溢出&#xff0c;讓黑…

eclipse啟動tomcat, http://localhost:8080無法訪問的解決方案

問題:&#xff1a; tomcat在eclipse里面能正常啟動&#xff0c;但在瀏覽器中訪問http://localhost:8080/不能訪問tomcat管理頁面&#xff0c;且報404錯誤。同時其他項目頁面也不能訪問。訪問的時候出現下列頁面: 現在關閉eclipse里面的tomcat&#xff0c;在tomcat安裝目錄下雙擊…

GWT EJB3 Maven JBoss 5.1集成教程

大家好&#xff0c; 在本文中&#xff0c;我們將演示如何正確集成GWT和EJB3 &#xff0c;以實現示例項目&#xff0c;使用maven進行構建并將其部署在JBoss 5.1應用服務器上。 實際上&#xff0c;您可以輕松地更改maven構建文件中的依賴關系&#xff0c;并將項目部署到您喜歡的…

VS2019注釋整段代碼

VS2019注釋整段代碼 1.注釋 先CTRLK&#xff0c;然后CTRLC 2.取消注釋&#xff1a; 先CTRLK&#xff0c;然后CTRLU 順便寫一下&#xff1a; VS code注釋整段代碼 Alt Shift A 注釋 CodeBlocks&#xff1a; CtrlShiftC注釋掉當前行或選中部分&#xff0c; CtrlShiftX解除注釋…

linux中的開機和關機命令

與關機、重新啟動相關的命令 * 將數據同步寫入硬盤中的命令 sync * 慣用的關機命令 shutdown * 重新啟動、關機 reboot halt poweroff sync 強制將內存中的數據寫入到硬盤當中。因為linux系統中&#xff0c;數據會緩存在內存當中&#xff0c;所以為了保證數據完整保存在硬盤…

如何在不到1ms的延遲內完成100K TPS

馬丁湯普森&#xff08;Martin Thompson&#xff09;和邁克爾巴克&#xff08;Michael Barker&#xff09;討論了通過采用一種新的基礎架構和軟件方法來構建HPC金融系統&#xff0c;以不到1ms的延遲處理超過100K TPS的問題。 一些技巧包括&#xff1a; 了解平臺 建模領域 明…