前言
雖然之前的復(fù)利計(jì)算器版本已經(jīng)嘗試過(guò)使用JUnit單元測(cè)試,但由于沒(méi)有系統(tǒng)性地學(xué)習(xí)過(guò)JUnit的使用,用得并不好,主要問(wèn)題表現(xiàn)在測(cè)試的場(chǎng)景太少,并沒(méi)有達(dá)到測(cè)試所需的全面性,沒(méi)能體現(xiàn)JUnit這一神器的精髓所在,為此本版本的復(fù)利計(jì)算器在JUnit單元測(cè)試方面做了一些完善。
源代碼包結(jié)構(gòu)
如上圖所示,我把測(cè)試類統(tǒng)一放在新建的test源碼文件下(test打錯(cuò)了,已改),以便和程序代碼分離,方便操作。
細(xì)心看你能發(fā)現(xiàn),test目錄下的包和程序SRC目錄下相應(yīng)功能的代碼包名一致,這是為了表明測(cè)試的模塊針對(duì),做法參考自馬士兵老師的教學(xué)視頻,應(yīng)該也算是一種操作規(guī)范吧。。。
測(cè)試主過(guò)程
本程序的JUnit測(cè)試主要應(yīng)用于兩個(gè)方面:
1、對(duì)邏輯計(jì)算的測(cè)試--用于對(duì)合法的輸入后,對(duì)程序計(jì)算結(jié)果的檢測(cè),測(cè)試程序的邏輯計(jì)算是否達(dá)到了預(yù)期效果。
下面以復(fù)利終額計(jì)算的測(cè)試為例。
代碼如下:
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 }
測(cè)試結(jié)果如下:
其他邏輯計(jì)算模塊的測(cè)試類似,不一一列舉了。
2.對(duì)操作場(chǎng)景的測(cè)試--用于測(cè)試各種用戶可能的操作,如各種數(shù)據(jù)的輸入,以檢測(cè)程序?qū)@些操作所做響應(yīng)是否與預(yù)期效果一致。下面再以復(fù)利終額計(jì)算的測(cè)試為例
測(cè)試代碼:
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() {//非法操作:終額為負(fù)數(shù)
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() {//利率為負(fù)數(shù)
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() {//非法操作:本金為負(fù)數(shù)
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.測(cè)試結(jié)果如下:
本測(cè)試類里根據(jù)不同場(chǎng)景設(shè)計(jì)了不同的測(cè)試,具體場(chǎng)景請(qǐng)看展示代碼里的注釋。
需要注意的是,有的方法測(cè)試并不一定以true為正確返回值,如本程序中的非法輸入攔截功能,在檢測(cè)到非法輸入時(shí)應(yīng)該返回false才是正確的。如下圖所示:
總結(jié)
JUnit確實(shí)是一個(gè)很實(shí)用的東西,并且很靈活,用法因程序而異,也因人而異,我也只是剛剛接觸,知道的也有限,用得有點(diǎn)生硬但是感覺(jué)比上一次用得順手了,以后還得多練習(xí)吧。