代碼調試過程中容易遇到的問題

前兩天身體有些不舒服,也沒寫啥新文章,昨天下了一天的雨,今天陽光明媚,空氣也很新鮮,心情大好。

繼翻譯爲什麼輸出是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  讓測試失敗,並給出指定信息。

歡迎關注我的微博  ,我的微博會實時更新文章。  交流羣:

199326422

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章