免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

junit

 helloworld_sh 2011-03-11
 近期寫單元測試計劃,公司準備把junit3.8升級到j(luò)unit4以上的版本,所以研究了一下,寫下學習過程和心得體會,為了鞏固學習成果,所以把學習心得寫下來加深印象,也供需要的朋友查閱,少走彎路。
   好了,廢話不多說,直接開始:
   假設(shè)我們要寫一個整數(shù)除法和乘法的類,并且給他寫測試用例:

1) 建立Math類

工具是eclipse3.3
Java代碼 復(fù)制代碼
  1. /**  
  2.  * @author bulargy.j.bai  
  3.  * @mail bulargy@gmail.com  
  4.  * @創(chuàng)建時間:Mar 10, 2008  
  5.  * @描述:一個整數(shù)除法和乘法的工具類  
  6.  */  
  7. public class Math {   
  8.     public static int divide(int x,int y) {   
  9.         return x/y;   
  10.     }   
  11.   
  12.     public static int multiple(int x,int y) {   
  13.         return x*y;   
  14.     }   
  15. }  


2) 建立測試用例
選中需要建立測試用例的包,選擇new->other->JUnit Test Case。
有5個方法可以選擇:
setUp()方法在測試方法前調(diào)用,一般用來做測試準備工作。
tearDown()方法在測試方法后調(diào)用,一般作測試的清理工作。
setUpBeforeClass()方法在整個類初始化之后調(diào)用,一般用來做測試準備工作。
tearDownAfterClass()方法在整個類結(jié)束之前調(diào)用,一般作測試的清理工作。
constructor()為是否包含構(gòu)造方法。

自動生成的代碼如下:
Java代碼 復(fù)制代碼
  1. /**  
  2.  * @author bulargy.j.bai  
  3.  * @mail bulargy@gmail.com  
  4.  * @創(chuàng)建時間:Mar 11, 2008  
  5.  * @描述:  
  6.  */  
  7. public class MathTest {   
  8.   
  9.     @BeforeClass  
  10.     public static void setUpBeforeClass() throws Exception {   
  11.     }   
  12.   
  13.     @AfterClass  
  14.     public static void tearDownAfterClass() throws Exception {   
  15.     }   
  16.        
  17.     @Test  
  18.     public void testDivide() {   
  19.         fail("Not yet implemented");   
  20.     }   
  21.   
  22.     @Test  
  23.     public void testMultiple() {   
  24.         fail("Not yet implemented");   
  25.     }   
  26. }  

說明:
@BeforeClass標簽注釋的方法用于在整個類測試過程的初始化后調(diào)用一次,@AfterClass標簽注釋的方法則是整個測試類結(jié)束之前調(diào)用一次。這2個標簽的搭配可以避免使用@Before、@After標簽組合在每個測試方法前后都調(diào)用的弊端,減少系統(tǒng)開銷,提高系統(tǒng)測試速度。(不過對環(huán)境獨立性要求較高的測試還是應(yīng)當使用@Before、@After來完成)
@Test標簽用來標注待測試的方法,按照類中聲明的順序執(zhí)行。


我們在testDivide方法加入測試代碼,分別測試三種情況:
a. 完全正確也沒有可能出錯的數(shù)據(jù),如:9除3  結(jié)果必須等于3
b. 可能有問題的邊緣數(shù)據(jù),如:10除3 結(jié)果也必須等于3
c. 錯誤的數(shù)據(jù),如:10除0 必須拋出異常

忽略testMultiple方法

代碼如下:
Java代碼 復(fù)制代碼
  1. @Test(expected=ArithmeticException.class)   
  2. public void testDivide() {   
  3.     assertEquals(3,Math.divide(9,3));   
  4.     assertEquals(3,Math.divide(10,3));   
  5.     Math.divide(10,0); //除數(shù)不能為0,會拋出異常   
  6. }   
  7.   
  8. @Ignore("忽略乘法測試")   
  9. @Test  
  10. public void testMultiple() {   
  11. }  

說明:
Junit4為測試方法增加了判斷異常的方式,避免了以前還要通過try/catch塊捕捉異常再拋出的復(fù)雜方式,簡單的這樣聲明“@Test(expected=ArithmeticException.class)”Junit4就會檢查此方法是否拋出ArithmeticException異常,如果拋出則測試通過,沒拋出則測試不通過(@Test標簽還有一些其他參數(shù),例如超時測試@Test(timeout=1)這樣,但是由于并不能準確反應(yīng)實際時間,所以應(yīng)用較少,經(jīng)過我測試誤差太大絕對不適合拿來做超時測試的)
@Ignore標簽會告訴Junit4忽略它所標注的方法,例如數(shù)據(jù)庫不可用時可以用此標注標注一些測試數(shù)據(jù)庫連接的方法來避免測試失敗。

3) 運行測試
系統(tǒng)會打開JUnit透視圖,如果測試全部通過,則顯示顏色條為綠色;我們將assertEquals(3,Math.divide(9,3));改成assertEquals(2,Math.divide(9,3));則顯示顏色條為紅色,我們可以對錯誤或者故障的地方進行追蹤。

4) 創(chuàng)建測試套件
  測試套件可以將多個測試用例合在一起測試,將相關(guān)的測試用例合成一個測試套件,在做一個修改后,只需要運行測試套件就可以,不需要運行每一個測試用例。
  Junit4沒有采用以前的套件測試方法,同樣使用annotation的方式來進行。簡單在你所要構(gòu)建測試套件的包里創(chuàng)建一個文件,一般以包名+4Suite
下面我在上面的測試包中復(fù)制一下之前的測試類并且一個改名字叫做MathTestAnother,新建一個class類叫做Uitl4Suite,代碼如下:
Java代碼 復(fù)制代碼
  1. import org.junit.runner.RunWith;   
  2. import org.junit.runners.Suite;   
  3. import org.junit.runners.Suite.SuiteClasses;   
  4. /**  
  5.  * @author bulargy.j.bai  
  6.  * @mail bulargy@gmail.com  
  7.  * @創(chuàng)建時間:Mar 11, 2008  
  8.  * @描述:util包的測試套件  
  9.  */  
  10. @RunWith(Suite.class)   
  11. @SuiteClasses({MathTest.class,   
  12.            MathTestAnother.class})   
  13. public class Util4Suite {   
  14. }  

說明:
通過@RunWith和@SuiteClasses標簽來注釋一個空的包含無參數(shù)構(gòu)造函數(shù)的類來作為套件類,將需要組成套件運行的類加到@SuiteClasses的屬性中即可。

可以看到運行套件類的結(jié)果是2個測試類都進行了測試。

5) 參數(shù)測試
修改 testMultiple
Java代碼 復(fù)制代碼
  1. //@Ignore("忽略乘法測試")   
  2. @Test  
  3. public void testMultiple() {   
  4.     assertEquals(result,Math.multiple(faciend,multiplicator));   
  5. }  

編寫參數(shù)方法:
Java代碼 復(fù)制代碼
  1. @Parameters  
  2.     public static Collection multipleValues() {   
  3.         return Arrays.asList(new Object[][] {   
  4.         {326 },   
  5.         {4312 },   
  6.         {215105 },   
  7.         {1122242 },   
  8.         {8972 }});   
  9.     }  

說明:
需要使用@Parameters標簽注解一個靜態(tài)的返回集合對象的方法

增加成員變量和構(gòu)造函數(shù):
Java代碼 復(fù)制代碼
  1. int faciend;   
  2. int multiplicator;   
  3. int result;   
  4.   
  5. public MathTest(int faciend, int multiplicator, int result) {   
  6.     this.faciend = faciend;   
  7.     this.multiplicator = multiplicator;   
  8.     this.result = result;   
  9. }  

最后在給測試類增加如下注釋:
Java代碼
  1. @RunWith(Parameterized.class)  


完整的循環(huán)測試代碼如下:
Java代碼
  1. import static org.junit.Assert.*;   
  2.   
  3. import java.util.Arrays;   
  4. import java.util.Collection;   
  5.   
  6. import org.junit.AfterClass;   
  7. import org.junit.BeforeClass;   
  8. import org.junit.Ignore;   
  9. import org.junit.Test;   
  10. import org.junit.runner.RunWith;   
  11. import org.junit.runners.Parameterized;   
  12. import org.junit.runners.Parameterized.Parameters;   
  13.   
  14. /**  
  15.  * @author bulargy.j.bai  
  16.  * @mail bulargy@gmail.com  
  17.  * @創(chuàng)建時間:Mar 11, 2008  
  18.  * @描述:  
  19.  */  
  20. @RunWith(Parameterized.class)   
  21. public class MathTest {   
  22.     int faciend;   
  23.     int multiplicator;   
  24.     int result;   
  25.   
  26.     public MathTest(int faciend, int multiplicator, int result) {   
  27.          this.faciend = faciend;   
  28.          this.multiplicator = multiplicator;   
  29.          this.result = result;   
  30.     }   
  31.   
  32.     @BeforeClass  
  33.     public static void setUpBeforeClass() throws Exception {   
  34.     }   
  35.   
  36.     @AfterClass  
  37.     public static void tearDownAfterClass() throws Exception {   
  38.     }   
  39.   
  40.     @Test(expected=ArithmeticException.class)   
  41.     public void testDivide() {   
  42.         assertEquals(3,Math.divide(9,3));   
  43.         assertEquals(3,Math.divide(10,3));   
  44.         Math.divide(10,0);//除數(shù)不能為0,會拋出異常   
  45.   
  46.     }   
  47.   
  48.     //@Ignore("忽略乘法測試")   
  49.     @Test  
  50.     public void testMultiple() {   
  51.         assertEquals(result,Math.multiple(faciend,multiplicator));   
  52.     }   
  53.        
  54.     @Parameters  
  55.     public static Collection multipleValues() {   
  56.      return Arrays.asList(new Object[][] {   
  57.         {326 },   
  58.         {4312 },   
  59.         {215105 },   
  60.         {1122242 },   
  61.         {8972 }});   
  62.     }   
  63.   
  64. }  

OK,大功告成。測試看看吧,測試類跑了5次~~。

大概就這么多體會了,總得來說JUnit4以后測試還是很方便的,順便這個是僅僅是為了做例子,實際使用中由于JUnit4不再受命名的限制,所以應(yīng)該劃分更細粒度的測試來完成,一個方法的正確,異常,錯誤及邊界數(shù)據(jù)完全可以分開來寫測試方法。由于大部分情況資源只用加載和釋放一次就足夠,大大提高的測試的速度,再也不會有以前那樣點開測試然后去泡咖啡的情況出現(xiàn)了~~呵呵~~

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多