junit 測試中各種斷言用法
為什麼需要單元測試
在開發軟體的過程中,使用者需要實際執行所編寫的程式碼以確保程式的正確性。當軟體變得越來越大,再去新增新的功能或做一些新的改動時,就很容易帶來新的問題,甚至會使程式無法正常執行。然而要手動的執行程式碼,測試程式碼的可行性也是非常枯燥以及非常耗費時間的事情。
為了減少這種手動測試,可以通過建立單元測試來自動完成測試的工作。當修改程式碼或者新增新功能後,可以執行單元測試來保證程式碼執行無誤。所有測試工作都是由單元測試自動完成的,開發人員所要做的就是停下來喝杯茶,看看程式的執行狀態。
使用單元測試的另一個理由是實現測試驅動的開發,這在當前是比較流行的開發方式。測試驅動的開發嘗試首先寫出單元測試,然後完成實際的程式碼。通過單元測試來提供類的定義,當實際開始編寫程式碼時,使用者僅僅需要做的就是具體類的實現,只要單元測試執行通過,程式碼的實現也將告一段落了。寫單元測試的同時,也在同時在做專案的設計,當專案結束後,單元測試還將是不錯的文件,何樂而不為呢?
自信編碼
人的記憶是短暫的,但程式碼的修改是無限的,怎樣讓無限的修改不會因為記憶的短暫而帶來無窮的煩惱呢?這是非常矛盾的事情,單元測試能夠一定程式上解決這個問題。
也許所有的程式設計師都遇到過這樣的問題,當要修改很久以前的程式碼或他人編寫的程式碼時,總是會很猶豫,因為他們不清楚所做的修改會不會引起其它的問題,只能當遍歷了所有的程式碼後才敢動手。這是非常正常的,但也因此浪費了很多的時間,通過單元測試能夠一定程度上增強使用者的自信心,因為單元測試的前提假設就是,如果通過了所有的測試,程式碼就是可行的。
JUnit測試框架
在Java語言中,可以通過JUnit框架進行單元測試,JUnit是由“Erich Gamma”和“Kent Beck”建立的,他們也是在“設計模式”和“極限程式設計”領域最偉大的作者之一。
單元測試的實現是很簡單的,可以認為它只是判斷在某一個時刻,程式執行的值和預期的值是否一致,但在實際的應用的時候是很靈活的,在此介紹JUnit中的一些斷言以及JUnit測試框架的使用,使讀者能夠快速的進入單元測試的領域,更快的進行開發。斷言
JUnit提供了一些輔助函式,用於幫助開發人員確定某些被測試函式是否工作正常。通常而言,把所有這些函式統稱為斷言,斷言是單元測試最基本的組成部分。
通常每種型別的斷言都有兩種形式,一種包含接收一個message引數,例如“static public void assertTrue(String message, boolean condition)”,message表示出錯時的提示資訊,另外一個則沒有message引數。
下面將分別介紹JUnit框架Assert類中的斷言以及部分實現,每個函式的實現方法都為Assert類中定義的方法,讀者也可以檢視JUnit框架Assert類的實現程式碼。
assertEquals斷言
這是應用非常廣泛的一個斷言,它的作用是比較實際的值和使用者預期的值是否一樣,assertEquals在JUnit中有很多不同的實現,以引數expected和actual都為Object型別的為例,assertEquals定義為:
- static public void assertEquals(String message, Object expected, Object actual) {
- if (expected== null&& actual == null)
- return;
- if (expected != null&& expected.equals(actual))
- return;
- failNotEquals(message, expected, actual);
- }
其中,expected為使用者期望某一時刻物件的值,actual為某一時刻物件實際的值。如果這兩值相等的話(通過物件的equals方法比較),說明預期是正確的,也就是說,程式碼執行是正確的。assertEquals還提供了其它的一些實現,例如整數比較,浮點數的比較等等。
assertTrue與assertFalse斷言
assertTrue與assertFalse可以判斷某個條件是真還是假,如果和預期的值相同則測試成功,否則將失敗,assertTrue的定義如下:
assertTrue與assertFalse斷言
assertTrue與assertFalse可以判斷某個條件是真還是假,如果和預期的值相同則測試成功,否則將失敗,assertTrue的定義如下:
其中,expected為使用者期望某一時刻物件的值,actual為某一時刻物件實際的值。如果這兩值相等的話(通過物件的equals方法比較),說明預期是正確的,也就是說,程式碼執行是正確的。assertEquals還提供了其它的一些實現,例如整數比較,浮點數的比較等等。
1.assertTrue/False([String message,]boolean condition);
判斷一個條件是true還是false。感覺這個最好用了,不用記下來那麼多的方法名。
2.fail([String message,]);
失敗,可以有訊息,也可以沒有訊息。
3.assertEquals([String message,]Object expected,Object actual);
判斷是否相等,可以指定輸出錯誤資訊。
第一個引數是期望值,第二個引數是實際的值。
這個方法對各個變數有多種實現。在JDK1.5中基本一樣。
但是需要主意的是float和double最後面多一個delta的值,可能是誤差範圍,不確定這個 單詞什麼意思,汗一個。
4.assertNotNull/Null([String message,]Object obj);
判讀一個物件是否非空(非空)。
5.assertSame/NotSame([String message,]Object expected,Object actual);
判斷兩個物件是否指向同一個物件。看記憶體地址。
7.failNotSame/failNotEquals(String message, Object expected, Object actual)
當不指向同一個記憶體地址或者不相等的時候,輸出錯誤資訊。
注意資訊是必須的,而且這個輸出是格式化過的。
- staticpublic void assertTrue(String message, boolean condition) {
- if (!condition)
- fail(message);
- }
“condition”表示要測試的狀態,如果“condition”的值為false,則測試將會失敗。
assertNull與assertNotNull斷言
assertNull與assertNotNull可以驗證所測試的物件是否為空或不為空,如果和預期的相同則測試成功,否則測試失敗,assertNull定義為:
assertNull與assertNotNull斷言
assertNull與assertNotNull可以驗證所測試的物件是否為空或不為空,如果和預期的相同則測試成功,否則測試失敗,assertNull定義為:
- staticpublic void assertNull(String message, Objectobject) {
- assertTrue(message,object == null);
- }
其中,object就是要測試的對物件,如果object為空,該測試成功,否則失敗,是不是很簡單。
assertSame與assertNotSame斷言
assertSame和assertEquals不同,assertSame測試預期的值和實際的值是否為同一個引數(即判斷是否為相同的引用)。assertNotSame則測試預期的值和實際的值是不為同一個引數。assertSame的定義為:
assertSame與assertNotSame斷言
assertSame和assertEquals不同,assertSame測試預期的值和實際的值是否為同一個引數(即判斷是否為相同的引用)。assertNotSame則測試預期的值和實際的值是不為同一個引數。assertSame的定義為:
- static publicvoid assertSame(String message, Object expected, Object actual) {
- if (expected== actual)
- return;
- failNotSame(message, expected, actual);
- }
而assertEquals則判斷兩個值是否相等,通過物件的equals方法比較,可以相同引用的物件,也可以不同。
fail斷言
“fail”斷言能使測試立即失敗,這種斷言通常用於標記某個不應該被到達的分支。例如assertTrue斷言中,condition為false時就是正常情況下不應該出現的,所以測試將立即失敗,fail的定義為:
fail斷言
“fail”斷言能使測試立即失敗,這種斷言通常用於標記某個不應該被到達的分支。例如assertTrue斷言中,condition為false時就是正常情況下不應該出現的,所以測試將立即失敗,fail的定義為:
- staticpublic void fail(String message) {
- throw new AssertionFailedError(message);
- }
當一個失敗或者錯誤出現的時候,當前測試方法的執行流程將會被中止,但是位於同一個測試類中的其他測試將會繼續執行。
junit中的assert方法全部放在Assert類中,總結一下junit類中assert方法的分類。
1.assertTrue/False([String message,]boolean condition);
判斷一個條件是true還是false。感覺這個最好用了,不用記下來那麼多的方法名。
2.fail([String message,]);
失敗,可以有訊息,也可以沒有訊息。
3.assertEquals([String message,]Object expected,Object actual);
判斷是否相等,可以指定輸出錯誤資訊。
第一個引數是期望值,第二個引數是實際的值。
這個方法對各個變數有多種實現。在JDK1.5中基本一樣。
但是需要主意的是float和double最後面多一個delta的值,可能是誤差範圍,不確定這個 單詞什麼意思,汗一個。
4.assertNotNull/Null([String message,]Object obj);
判讀一個物件是否非空(非空)。
5.assertSame/NotSame([String message,]Object expected,Object actual);
判斷兩個物件是否指向同一個物件。看記憶體地址。
7.failNotSame/failNotEquals(String message, Object expected, Object actual)
當不指向同一個記憶體地址或者不相等的時候,輸出錯誤資訊。
注意資訊是必須的,而且這個輸出是格式化過的。
附junit4詳解
http://www.cnblogs.com/eggbucket/archive/2012/02/02/2335697.html
相關文章
- JUnit 單元測試斷言推薦 AssertJ
- 自動化測試中如何判斷測試是否通過?詳解 Pytest 測試框架的斷言用法框架
- Junit5系列-Junit5中Assertions斷言類
- JUnit測試方法
- JUnit 4中annotation的用法
- 【JUnit測試】總結
- JUnit單元測試
- Junit 單元測試.
- Junit 4 測試方法
- junit 使用JUnit測試預期異常
- JUnit3.8的Junit單元測試.
- 聊聊各種測試的區別
- 各種工具在軟體測試中的作用,值得收藏!
- junit-單元測試
- Android的Junit測試Android
- JUnit 4 單元測試
- Myexclipse建立Junit測試
- JUnit測試單元框架框架
- junit測試工具運用
- springboot junit測試Spring Boot
- Junit單元測試—MavenMaven
- Junit測試Android自動化測試Android
- Junit5系列-Junit5中DisabledCondition條件測試執行
- 疑惑:java中文問題在各種測試中的結果Java
- Linux Shell中各種括號用法總結!Linux
- 介面測試--自定義斷言設定
- 介面測試--apipost介面斷言詳解API
- [譯]重新思考單元測試斷言
- Java單元測試之junitJava
- Junit4單元測試
- restore archivelog 的各種用法RESTHive
- restore archivelog 的各種用法RESTHive
- java中的Static、final、Static final各種用法Java
- Oracle 11.2.0.1 Result Cache 測試 - 11 各種場景測試結果Oracle
- 搞定Go單元測試(三)—— 斷言(testify)Go
- JUnit5的條件測試、巢狀測試、重複測試巢狀
- 使用JUnit進行單元測試
- JUnit5編寫基本測試