辛辛苦苦搬了一天磚,結果發現絕大部分時間是在寫Bug,改起來真是痛不欲生,而後突然想起來還有個JUnit測試,方便咱們debug調試java
1. Assertion
斷言是一種調試程序的方式,能夠理解爲高級的異常,其常與測試類並用,使用assert
關鍵字來實現斷言。在JVM中默認是關閉斷言的(這樣在線上環境就不會啓用,而在生產環境本身手動開啓方便調試)spring
1.1 開啓斷言
點擊菜單欄的Windows -> preference,在彈窗中選擇Installed JRES編輯它,在默認參數中添加 -ea,肯定完成app
1.2 格式與使用
assert <布爾表達式>框架
assert <布爾表達式> :消息單元測試
public static void main(String[] args) { int num = 1; assert (num == 1) : "num不等於1"; }
// 表達式爲true,則沒有斷言發生
public static void main(String[] args) { String str = "Hello World"; assert (str.equals("Hello")) : "str不等於Hello"; }
// 表達式爲false,發生斷言並由消息提示 Exception in thread "main" java.lang.AssertionError: str不等於Hello at Assert.main(Assert.java:10)
2. JUnit
基於TDD開發,常常要測試代碼功能是否可以使用,日常咱們寫完一個功能都是在類裏的main()方法中來測試的,eg:測試
完成的功能spa
public class Foo { public void add(int a, int b){ System.out.println(a + b); } public void sub(int a, int b){ System.out.println(a - b); } // 用來測試的main()方法 public static void main(String[] args) { Foo f = new Foo(); f.add(1, 1); f.sub(3, 1); } }
可是類中只能有一個main方法且不能把測試代碼分離,又沒有打印出測試結果和指望結果,並且難於編寫一組通用的測試代碼,因此咱們須要一個完成的測試框架,這時JUnit出現了,幾乎全部的IDE都集成了JUnit,這樣咱們就能夠直接在IDE中編寫並運行JUnit測試.net
2.1 編寫測試類
自動生成的目錄結構,默認測試類以Test結尾,且在測試的方法上加上註解@Test,這時斷言就出現做用了,使用斷言能知道報錯的具體內容。單元測試能夠確保單個方法按照正確預期運行,若是修改了某個方法的代碼,只需確保其對應的單元測試經過,便可認爲改動正確。此外,測試代碼自己就能夠做爲示例代碼,用來演示如何調用該方法,對着要測試方法右鍵 -> Run AS -> JUnit Testdebug
沒有出錯調試
出錯
能夠在左邊看到紅色的提示框,表明報錯,提示框上放Runs表示運行的測試方法/經過的方法,報錯的數量,失敗次數
2.2 Fixture
進行測試時咱們常常須要準備測試環境,好比須要建立對象,測試以後還需還原環境,若在每一個測試方法內都寫上環境內容就重複太多了,這時Fixture就出現了,其註解有:@Before,@After表示在每一個測試方法先後運行
咱們測試環境可用上面兩個註解來實現
2.3 @Ignore
若是給測試方法加上@Ignore,則測試中暫時不容許該方法。不建議去掉@Test註解,這樣就不知道該方法是個測試方法了
3 補充
3.1 Timeout
@Test(timeout = 1000) //毫秒爲單位 public void TimeOut(){ while(true){ System.out.println("循環"); } }
3.2 @Runwith(XXX.class)
JUnit的測試方法都是在Runner(運行器)中執行的。使用@Runwith能夠爲這個測試類指定一個運行器。JUnit中有一個默認的Runner,因此咱們平時沒有使用這個註解,但在Spring中咱們就能夠看到@Runwith的身影,這時由於spring整合了JUnit,爲其提供了一個包括Spring容器的運行器
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:applicationContext.xml" }) public class SpringTest { @Autowired UserDao userDao; @Test public void testUserDao() { } }
本文分享 CNBlog - Howlet。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。