前兩天身體有些不舒服,也沒寫啥新文章,昨天下了一天的雨,今天陽光明媚,空氣也很新鮮,心情大好。
繼翻譯爲什麼輸出是String而不是Object,今天先寫一下調試方面的東西。java中自帶的函數調試是assert,也就是斷言,是在java1.4引入的,下面回顧一下什麼是斷言。
斷言(Assertions)是在Java 1.4引入的,到現在仍然是Java語言最有用並且最重要的附加功能之一。斷言(Assertions)主要用於在程序中判斷結果是否正確。斷言(Assertions)測試條件是否是true值(又叫布爾表達示),當條件爲false時通知開發人員。使用斷言可以在代碼的正確性上極大地提升你的信心。
實現斷言:
斷言是通過assert表達式和java.lang.AssertionError類來實現的。這個表達式以關鍵字assert開頭,後跟着一個布爾表達式。assert表達式語法上表示如下:
assertBooleanExpr;
如果BooleanExpr爲true,什麼事都不會發生,執行會繼續。但是,如果表達式爲false,AssertionError會初始化並被拋出。如下清單1
/**
blog :www.marksaas.com
author :marksaas
*/
public class AssertDemo{
public static void main(String[] args){
int i=-1;
assert i>=0;
}
}
在Listing 1中的斷言表明開發人員希望變量x包含一個大於等於0的值。然而,這顯然是不正確的,這個斷言表達式執行後會拋出AssertionError。
編譯清單1(javac AssertDemo.java),開啓斷言並執行(java -ea AssertDemo)。你應該可以看到下面的輸出:
對於另外一種例子,不帶-ea(enable assertions)參數執行AssertDemo將會沒有任何輸出。當斷言沒有啓用時,儘管它們仍然存在classfile中,但它們並不會被執行。
在Junit測試 中斷言的方法:
public static void assertEquals(Object[] expected, Object[] actual)
public static void assertEquals(String message, Object[] expected, Object[] actual)
是JUnit 4 爲比較數組添加的兩個 assert() 方法.這兩個方法以最直接的方式比較數組:如果數組長度相同,且每個對應的元素相同,則兩個數組相等,否則不相等。數組爲空的情況也作了考慮。 .
常用斷言介紹:
1. assertEquals([String message],Object target,Object result) target與result不相等,中斷測試方法,輸出message
assertEquals(a, b) 測試a是否等於b(a和b是原始類型數值(primitive value)或者必須爲實現比較而具有equal方法)
assertEquals斷言兩個對象相等,若不滿足,方法拋出帶有相應信息的AssertionFailedError異常。
例如計算器加法功能的測試可以使用一下驗證:
Assert.assertEquals(0,result);
2. assertTrue/False([String message],Boolean result) Result爲 false/true,中斷測試方法,輸出message
assertTrue 斷言條件爲真,若不滿足,方法拋出帶有相應信息的AssertionFailedError異常。
assertFalse 斷言條件爲假,若不滿足,方法拋出帶有相應信息的AssertionFailedError異常。
assertFalse(a) 測試a是否爲false(假),a是一個Boolean數值;
3. assertNotNull/Null([String message],Obejct result ) Restult == null/result!=null,中斷測試方法,輸出message
assertNull 斷言對象爲null,若不滿足,方法拋出帶有相應信息的AssertionFailedError異常。
assertNotNull 斷言對象不爲null,若不滿足,方法拋出帶有相應信息的AssertionFailedError異常。
assertNotNull(a) 測試a是否非空,a是一個對象或者null;
4.assertSame/NotSame(Object target,Object result) Traget與result 不指向/指向 同一內存地址(實例),中斷測試方法,輸出message
assertSame 斷言兩個引用指向同一個對象,若不滿足,方法拋出帶有相應信息AssertionFailedError異常。
assertNotSame 斷言兩個引用指向不同對象,若不滿足,方法拋出帶有相應信息的AssertionFailedError異常。
assertNotSame(a, b) 測試a和b是否沒有都引用同一個對象;
5. fail([String message]) 中斷測試方法,輸出message
Fail 讓測試失敗,並給出指定信息。