報(bào)告左邊是包名,以及包下邊的類(lèi);右邊是主窗口,顯示當(dāng)前這個(gè)Money類(lèi)的測(cè)試覆蓋率,我們可以通過(guò)行號(hào)來(lái)查看到15、16、17行執(zhí)行了156次,下邊還會(huì)有兩行一次也沒(méi)有執(zhí)行過(guò),所以造成這個(gè)類(lèi)整體的測(cè)試覆蓋率不是100%。
四、重構(gòu)測(cè)試代碼實(shí)現(xiàn)百分百測(cè)試覆蓋率
我們總是希望做單元測(cè)試的時(shí)候,讓代碼的測(cè)試覆蓋率盡可能的達(dá)到100%,所以我們需要重構(gòu)測(cè)試代碼。從分析得知,第40行雖然執(zhí)行了27次,但是從來(lái)沒(méi)有測(cè)試if的判斷條件為true的情況,所以我們要添加測(cè)試用例,測(cè)試isZero()返回為true的情況!因此,我們修改測(cè)試代碼MoneyTest.java文件,在前邊初始化地方加上一個(gè)Money實(shí)例,如下:
public class MoneyTest extends TestCase {
private Money f12CHF;
private Money f14CHF;
private Money f7USD;
private Money f21USD;
private Money f0USD;
在setup方法里添加:
protected void setUp() {
f12CHF= new Money(12, "CHF");
f14CHF= new Money(14, "CHF");
f7USD= new Money( 7, "USD");
f21USD= new Money(21, "USD");
f0USD = new Money(0, "USD"); //sincky
在后加上一個(gè)測(cè)試用例:
public void testMoneyEqualsZero() {
assertTrue(!f0USD.equals(null));
IMoney equalMoney = new Money(0, "CHF");
assertTrue(f0USD.equals(equalMoney));
}
之后,我們重新編譯,測(cè)試,創(chuàng)建報(bào)告,即執(zhí)行下列命令:
>ant clean
>ant clover compile
>ant test
>ant report
這時(shí)候再打開(kāi)新的html報(bào)告,看到如下效果覆蓋率已經(jīng)到達(dá)100%:
完畢,如果能進(jìn)展到這一步,相信你已經(jīng)對(duì)使用junit、ant、clover做java的單元測(cè)試,已經(jīng)到了一個(gè)新的飛越!如果有興趣,你還可以把junit報(bào)告和clover報(bào)告一并輸出,以更好的為企業(yè)開(kāi)發(fā)中使用這種工作模式!
文章源碼均來(lái)自clover網(wǎng)站,本人稍做修改。