JUnit



辛辛苦苦搬了一天磚,結果發現絕大部分時間是在寫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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索