1. 程式人生 > >JUnit框架功能詳細(Rule、Assume、Assert)——JUnit學習(二)

JUnit框架功能詳細(Rule、Assume、Assert)——JUnit學習(二)

轉載網址http://my.oschina.net/pangyangyang/blog/146015

Rule

JUnit4中包含兩個註解@Rule和@ClassRule用於修飾Field或返回Rule的Method,Rule是一組實現了TestRule介面的共享類,提供了驗證、監視TestCase和外部資源管理等能力。JUnit提供了以下幾個Rule實現,必要時也可以自己實現Rule。
  • Verifier: 驗證測試執行結果的正確性。
  • ErrorCollector: 收集測試方法中出現的錯誤資訊,測試不會中斷,如果有錯誤發生測試結束後會標記失敗。
  • ExpectedException: 提供靈活的異常驗證功能。
  • Timeout: 用於測試超時的Rule。
  • ExternalResource: 外部資源管理。
  • TemporaryFolder: 在JUnit的測試執行前後,建立和刪除新的臨時目錄。
  • TestWatcher: 監視測試方法生命週期的各個階段。
  • TestName: 在測試方法執行過程中提供獲取測試名字的能力。
簡單的說就是提供了測試用例執行過程中一些通用功能的共享的能力,使我們不必重複編寫一些功能類似的程式碼。JUnit用於標註Rule的註解包括@Rule和@ClassRule,區別在於作用域不同@Rule的作用域是測試方法,@ClassRule則是測試Class。下面簡單介紹下上述Rule的使用。
Verifier
:  
是校驗功能的Rule,你可以實現Verifier的verify方法,在測試方法執行後(無異常的話)會呼叫verify方法校驗測試結果(如檔案、結果是否更改等),與預期結果不符時丟擲異常導致當前測試失敗。
ErrorCollector: 繼承自Verifier。用於Test Method執行過程中收集錯誤,不會中斷Test Method的執行,如果捕獲到錯誤會最終導致測試失敗。個人感覺ErrorCollector的用途比較有限,因為收集錯誤的程式碼都比較複雜不是很實用,一些特殊場景(測試方法很複雜、存在多項測試並且啟動測試的開銷比較大)可能使用到。ErrorCollector提供的收集方法有三個: 

  • collector.addError(Throwable):這是最簡單的收集方式,可以用在try...catch中,記錄發生的錯誤。
  • collector.checkSucceeds(Callable<Object>()):支援呼叫callable的call方法,是同步的。一旦Callable丟擲異常ErrorCollector會記錄並最終導致失敗。
  • collector.checkThat(T value, Matcher<T> matcher):測試value是否匹配Matcher,如果不匹配會記錄matcher提供的錯誤資訊。

ExpectedException:異常測試,在上一篇文章中介紹的@Test(expected=xxx)用法本質就是利用了這個Rule。相比之前的用法ExpectedException提供了靈活匹配規則,可以根據message、cause和異常的具體型別匹配。以下程式碼分別測試了message、異常型別和cause匹配:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 public class ExpectedExceptionTest { @Rule public ExpectedException exp = ExpectedException.none(); @Test public void expectException() { exp.expect(IndexOutOfBoundsException.class); throw new IndexOutOfBoundsException("Exception method."); } @Test public void expectMessage() { exp.expectMessage("Hello World"); throw

相關推薦

JUnit框架功能詳細RuleAssumeAssert——JUnit學習

轉載網址http://my.oschina.net/pangyangyang/blog/146015 Rule JUnit4中包含兩個註解@Rule和@ClassRule用於修飾Field或返回Rule的Method,Rule是一組實現了TestRule介面的

JUnit框架功能詳細——JUnit學習

是著名的單元測試框架,在JUnit4中所有的測試用例採用@Annotation標註,這比JUnit3的通過類繼承和特定方法名帶來更大的靈活性。在花了一週多的時間學習JUnit4使用及原碼後發現自己以往只用到了JUnit的基本功能,忽視了JUnit的很多強大功能。這裡記錄和分享下自己發現的JUnit

16【李巨集毅機器學習2017】Unsupervised Learning: Deep Auto-encoder無監督學習:深度自動編碼器

本篇部落格將介紹無監督學習演算法中的 Deep Auto-encoder。 目錄 Deep Auto-encoder 輸入28*28維度的影象畫素,由NN encoder輸出code,code的維度往往小於784,但我們並不知道code的

初識面向對象 -類和對象命名空間組合用法學習筆記

多態 數據 math att class 動態 ini 數據類型 rom 類和對象命名空間 # 類裏 可以定義兩種屬性# 靜態屬性# 動態屬性class Course:language = [‘Chinese‘]def __init__(self,teacher,cour

PHP全棧開發: HTML 學習2. div 布局

樣式 nbsp oat clas 控制 color 兩個 如果 排列 無序列表,有序列表,自定義列表 無序列表是ul表示,每個元素用li表示 有序列表是ol表示,每個元素用li表示 <ul> <li>首頁</li>&

轉載Numpy學習1——陣列填充np.pad()函式的應用

  【時間】2018.11.02 【題目】(轉載)Numpy學習——陣列填充np.pad()函式的應用 概述 本文轉載自 http://www.th7.cn/Program/Python/201712/1284487.shtml ,主要講述了陣

Redis學習01_redis安裝部署centos Redis學習:CentOS下redis安裝和部署

原文: http://www.cnblogs.com/herblog/p/9305668.html Redis學習(一):CentOS下redis安裝和部署   1.基礎知識  redis是用C語言開發的一個開源的高效能鍵值對(key-value)資料庫。它通過提

Java內容梳理14API學習

1、String類 (1)常見的建立String物件方式 (1.1)String str1 = "123"; (1.2)String str2 = new String("123"); (1.3)char[] a = new char[] {'1','2','3'}

Java內容梳理18API學習6I/O流

目錄: 1、I/O流的分類 2、常用的I/O流 3、物件的序列化和反序列化 4、物件克隆 5、圖片操作 1、I/O流的分類 (1)介紹 流說明了Java中讀寫資料的方式: 順序讀寫資料:從左到右,從上到下依此讀取資料 資料的流動方向:單向 參照物:程式

Java內容梳理19API學習7執行緒

目錄: 1、程序和執行緒 2、執行緒的建立 3、執行緒的執行方式和使用場景 4、執行緒的生命週期 5、執行緒優先順序 6、守護執行緒 7、執行緒常用API 8、執行緒安全 9、鎖機制 10、執行緒同步控制(死鎖的介紹) 11、定時器 1、程序和執行

Java內容梳理20API學習8網路程式設計

1、服務端和客戶端 服務端:主要用提供各種資源,各種功能,各種資料這類的遠端服務 客戶端:連線服務端從而從伺服器下載各種資源,使用各種功能的這種執行在本機上的程式,我們稱為客戶端 2、網路應用模型(C/S 和 B/S架構) C/S架構:Client-Server

Java內容梳理21API學習9GUI圖形介面

1、GUI介紹 GUI程式設計:使用者圖形介面,軟體介面程式設計 Java中的GUI程式設計技術:AWT;Swing(AWT的擴充套件);SWT;JavaFx 2、Swing程式設計 元件: 組成軟體介面的零件;包括容器,控制元件,主題 控制元件: 與使用者發

《組合語言第3版王爽 著學習筆記:基礎知識2

1.7 CPU 對儲存器的讀寫 以上講到,儲存器被劃分成多個儲存單元,儲存單元從零開始編號。這些編號可以看作儲存單元在儲存器中的地址。就想一條街,每個房子都有門牌號碼。 CPU 要從記憶體中讀資料,

統計學習方法5整合學習提升方法

統計學習方法(4)整合學習(提升方法) 1、Bagging: 基於並行策略:基學習器之間不存在依賴關係,可同時生成。 基本思路: 利用自助取樣法對訓練集隨機取樣,重複進行 T 次; 基於每個取樣集訓練一個基學習器,並得到 T 個基學習器; 預測時,集體投票決策

Machine Learning學習筆記十四整合學習Boosting,Bagging,組合策略

整合學習 在一些資料探勘競賽中,後期我們需要對多個模型進行融合以提高效果時,常常會用到Bagging,Boosting,Stacking等這幾個框架演算法。 整合學習在機器學習演算法中具有較高的準確率,不足之處就是模型的訓練過程可能比較複雜,效率不是很高。目前接觸較多的整合學習主要

轉載深度學習2——線性單元和梯度下降

原文地址:https://www.zybuluo.com/hanbingtao/note/448086 轉載在此的目的是自己做個筆記,日後好複習,如侵權請聯絡我!!   在上一篇文章中,我們已經學會了編寫一個簡單的感知器,並用它來實現一個線性分類器。你應該還記得用來訓練感知器的『感知器規則』。然而,我們並沒有

python 常用模組 random 學習筆記

random Python中的random模組用於生成隨機數 random.random random.random()用於生成一個0到1的隨機符點數: 0 <= n < 1.0 >>> import random >>>

mybatis 入門[尚矽谷]_張曉飛_Mybatis 學習筆記一

建立資料庫 -- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `

Netty框架學習之(:Netty元件簡介

1. 概覽 從高層次的角度來看Netty, 它主要為需要開發高效能應用的開發者解決了“技術”的和“體系結構”的問題。首先,它的基於 Java NIO 的非同步的和事件驅動的實現,保證了高負載下應用程式 效能的最大化和可伸縮性。其次, Netty 也包含了一組設計模式,將應用程式邏輯從網

######較深的應用TensorFlow學習:Graph和Session ######較深的應用

之前講完變數常量等等基本量的操作,意味著最基本的東西都有了,然後接下來很重要的就是那些量和操作怎麼組成更大的集合,怎麼執行這個集合。這些就是計算圖譜graph和Session的作用了。 IV.Graph https://www.tensorflow.org/versions/r0.11/api_docs/p