㈠ Junit4入門之如何編寫好的測試類
在使用junit前, 我們需要 了解 一些規則,如何去寫好一個測試類。
之所以放在junit前說明,是因為單元測試不一定只能用junit去做,就算我們什麼軟體依賴都不用,也是可以做的,就是會麻煩點,不要下意識的覺得 單元測試=Junit ,應該是 單元測試 > Junit 。
市面上單元測試並不是只有junit一家的,還有許多其他的框架模塊,只是相比之下它們沒有junit普及。而且有些公司還有內部的單元測試框架,也未必是基於junit開發的。
甚至必要的時候,哪怕不用Juint,也要進行單元測試,這就只能用java原生的斷言語句等等了。
1)java中斷言(assert)的使用
一開始我以為斷言是junit中的特色,其實不然,斷言是一個編程術語,常用於單元測試中,甚至它都並不只存在於java。
而 java中的斷言 ,是在JDK1.4後開始使用的,關鍵字是assert,它主要是用在代碼 開發和測試時期 ,用於對某些數據進行預期判斷,如果結果不符合自己的預期,程序就警告或退出。
它的語法大概如下:
語法①:assert condition
condition代表一個布爾類型的條件表達式,如果為真,就繼續正常運行,如果為假,則異常退出
這里我斷言x>=0,如果計算結果符合我的預期則無事發生,如果計算結果x小於0,則不符合我的預期,斷言失敗,拋出AssertionError。
語法②:assert condition : message
condition和上面是一樣的,冒號後的message通常用於斷言失敗後的異常提示信息,它就是個傳入到AssertionError構造參數里的值,用於我們自定義錯誤詳情的,這里就不放代碼了,大家可以自己試試。
關於使用斷言還有個最重要的規則: 程序的任何行為都不能依賴斷言,千萬不要把斷言當成程序中的邏輯來使用 ,也就是你的代碼即便刪除裡面所有的斷言語句,它的邏輯和之前也是不能有任何變化的。因為它只是用於測試和開發的,甚至JVM默認都是關閉斷言使用的,如果沒有開啟斷言,程序會自動忽略所有斷言語句,彷彿它們並不存在,要執行assert語句,必須給Java虛擬機傳遞-enableassertions(可簡寫為**-ea**)參數 啟用斷言 ,也可以使用-disenableassertion(簡寫為**-da) 參數 關閉斷言**(默認就是關閉的)。
最後,雖然java有提供斷言,但我們實際開發中卻很少使用它,因為如果要使用它去測試,還不如直接用Junit框架去寫單元測試的代碼,Junit也提供了斷言的語句。
雖然我們用不上java里的斷言,但是也要有所了解,並且大部分的斷言其實邏輯都是差不多的。