天天看點

複利電腦4.0之再遇JUnit

複利電腦4.0之再遇JUnit

  • 前言

   雖然之前的複利電腦版本已經嘗試過使用JUnit單元測試,但由于沒有系統性地學習過JUnit的使用,用得并不好,主要問題表現在測試的場景太少,并沒有達到測試所需的全面性,沒能展現JUnit這一神器的精髓所在,為此本版本的複利電腦在JUnit單元測試方面做了一些完善。

  • 源代碼包結構
複利電腦4.0之再遇JUnit

    如上圖所示,我把測試類統一放在建立的test源碼檔案下(test打錯了,已改),以便和程式代碼分離,友善操作。

    細心看你就能發現,test目錄下的包和程式SRC目錄下相應功能的代碼包名一緻,這是為了表明測試的子產品針對,做法參考自馬士兵老師的教學視訊,應該也算是一種操作規範吧。。。

  • 測試主過程 

本程式的JUnit測試主要應用于兩個方面:

    1. 對邏輯計算的測試--用于對合法的輸入後,對程式計算結果的檢測,測試程式的邏輯計算是否達到了預期效果。

                    下面以複利終額計算的測試為例。

代碼如下:

1 @Test
2     public void testCalculate() {
3         boolean result = false;
4         CalculateService cs = new CalculateService();
5         double test = cs.calculateBenjin(2000000,0.03,10);
6         if(test == 1488187.82979345) result = true;
7         assertEquals(true,result);
8     }      

     測試結果如下:

複利電腦4.0之再遇JUnit

      其他邏輯計算子產品的測試類似,就不一一列舉了。

2.對操作場景的測試--用于測試各種使用者可能的操作,如各種資料的輸入,以檢測程式對這些操作所做響應是否與預期效果一緻。下面再以複利終額計算的測試為例

     測試代碼: 

1 @Test
 2     public void testCalculateInput1() {//合法輸入
 3         CalculateService cs = new CalculateService();
 4         boolean result = cs.calculShichangInput(200, 0.5, 100);
 5         assertEquals(true,result);
 6     }
 7     @Test
 8     public void testCalculateInput2() {//非法操作:終額為負數
 9         CalculateService cs = new CalculateService();
10         boolean result = cs.calculShichangInput(-200, 0.5, 100);
11         assertEquals(false,result);
12     }
13     @Test
14     public void testCalculateInput3() {//利率為負數
15         CalculateService cs = new CalculateService();
16         boolean result = cs.calculShichangInput(200, -0.5, 100);
17         assertEquals(false,result);
18     }
19     @Test
20     public void testCalculateInput4() {//非法操作:利率大于1
21         CalculateService cs = new CalculateService();
22         boolean result = cs.calculShichangInput(200, 2, 100);
23         assertEquals(false,result);
24     }
25     @Test
26     public void testCalculateInput5() {//非法操作:本金為負數
27         CalculateService cs = new CalculateService();
28         boolean result = cs.calculShichangInput(200, 0.5, -100);
29         assertEquals(false,result);
30     }
31     @Test
32     public void testCalculateInput6() {//非法操作:本金大于終額
33         CalculateService cs = new CalculateService();
34         boolean result = cs.calculShichangInput(200, 0.5, 300);
35         assertEquals(false,result);
36     }      

3.測試結果如下:

複利電腦4.0之再遇JUnit

本測試類裡根據不同場景設計了不同的測試,具體場景請看展示代碼裡的注釋。

   需要注意的是,有的方法測試并不一定以true為正确傳回值,如本程式中的非法輸入攔截功能,在檢測到非法輸入時就應該傳回false才是正确的。如下圖所示:

複利電腦4.0之再遇JUnit
  • 總結 

   JUnit确實是一個很實用的東西,并且很靈活,用法因程式而異,也因人而異,我也隻是剛剛接觸,知道的也有限,用得有點生硬但是感覺比上一次用得順手了,以後還得多練習吧。 

  • Github代碼傳送門: 

    請點選這裡