一,背景知識:ide
由前面的知識能夠知道:測試
/*
* @Test:將一個普通方法修飾爲一個測試方法
* @Test(exception=XXX.class)
* @Test(time=毫秒)
* @BeforeClass:它會在全部的測試方法前被執行,static修飾
* @AfterClass:它會在全部的測試方法後被執行,static修飾
* @Before:它會在每個測試方法前被執行一次
* @After:它會在每個測試方法後被執行一次
* @Ignore:省略
* @RunWith:修改運行器org。junit。runner。Runner
*
* */spa
其實@Test不只能夠修飾一個普通方法爲測試方法,還能夠獲取異常或者控制測試方法的執行時間線程
二,@Test的功能code
A,獲取異常blog
B,控制測試代碼執行時間it
A,獲取異常代碼展現io
1,獲取異常,對異常的捕獲:@Test(expected=XXX.class)class
1 package com.duo.util; 2 3 import static org.junit.Assert.*; 4 5 import org.junit.Test; 6 7 public class Anotation { 8 9 @Test(expected=ArithmeticException.class) 10 public void testDivide(){ 11 assertEquals(4, new Calculate().divide(12, 0)); 12 } 13 14 }
運行後結果:test
2,沒有經過@Test(expected=ArithmeticException.class)註解時代碼以及結果:
1 package com.duo.util; 2 3 import static org.junit.Assert.*; 4 5 import org.junit.Test; 6 7 public class Anotation { 8 9 @Test 10 public void testDivide(){ 11 assertEquals(4, new Calculate().divide(12, 0)); 12 } 13 14 }
運行結果:
B,控制測試代碼執行時間,代碼展現
測試方法控制@Test(timeout=毫秒),主要是針對代碼中有循環代碼的測試控制或者超時運行不符合預期的斷定
1,咱們使用對一個死循環進行測試:
1 package com.duo.util; 2 3 import static org.junit.Assert.*; 4 5 import org.junit.Test; 6 7 public class Anotation { 8 9 @Test(timeout=2000) 10 public void testWhile(){ 11 while(true){ 12 System.out.println("run forever..."); 13 } 14 } 15 }
結果及時運行2秒後系統自動中止運行;
2,讓當前線程運行2000毫秒,測試代碼運行3000毫秒,符合預期結果
1 package com.duo.util; 2 3 import static org.junit.Assert.*; 4 5 import org.junit.Test; 6 7 public class Anotation { 8 9 @Test(timeout=3000) 10 public void testReadFile(){ 11 try { 12 Thread.sleep(2000); 13 } catch (InterruptedException e) { 14 // TODO Auto-generated catch block 15 e.printStackTrace(); 16 } 17 } 18 }
運行結果經過;
也能夠經過調整測試時間比線程時間小,測試不符合預期的場景;
三,Ignore註解(該註解能夠忽略當前的運行的方法,有時候改測試方法沒有實現或者之後再實現)
1 package com.duo.util; 2 3 import static org.junit.Assert.*; 4 5 import org.junit.Ignore; 6 import org.junit.Test; 7 8 public class Anotation { 9 10 @Test(expected=ArithmeticException.class) 11 public void testDivide(){ 12 assertEquals(4, new Calculate().divide(12, 0)); 13 } 14 15 @Ignore 16 @Test(timeout=2000) 17 public void testWhile(){ 18 while(true){ 19 System.out.println("run forever..."); 20 } 21 } 22 23 @Test(timeout=3000) 24 public void testReadFile(){ 25 try { 26 Thread.sleep(2000); 27 } catch (InterruptedException e) { 28 // TODO Auto-generated catch block 29 e.printStackTrace(); 30 } 31 } 32 }
運行結果:
四,RunWith,能夠修改測試運行器:org.junit.runner.Runner(後面使用到再解釋)
五,斷言:assert
斷言assert的好多方法能夠直接使用,主要是使用了靜態導入:import static org.junit.Assert.*;