單元測試:通過簡單例子理解測試驅(qū)動開發(fā)(TDD)

通常我們設(shè)計一個應(yīng)用程序,并且快速創(chuàng)建單元測試來驗證我們的設(shè)計,在我們編寫這些測試時,這些測試也可以幫助改善了我最初的設(shè)計。隨著我們編寫越來越多的單元測試,正反饋的良性循環(huán)也會鼓勵我們盡早地編寫單元測試。當(dāng)我們設(shè)計并實現(xiàn)時,就自然地想要知道我們將會如何來測試一個類?;谶@一方法論,越來越多的開發(fā)者正從利于測試躍遷到測試驅(qū)動開發(fā)。

通過簡單例子來理解TDD

下面我們就從"保留兩位小數(shù),不能四舍五入"的例子理解什么是測試驅(qū)動開發(fā)。

問題:

編寫一個方法,輸入double參數(shù),返回保留兩位小數(shù),不能四舍五入的String。

第一步:編寫測試用例

按照我們預(yù)期的結(jié)果,編寫參數(shù)化的單元測試用例

@RunWith(value = Parameterized.class)
public class keep2DecimalParameterizedTest {
    private String expected;
    private double param0;
    @Parameterized.Parameters
    public static Collection<Object[]> getTestParameters() {
        return Arrays.asList(new Object[][]{
                {"1.00", 1.002},
                {"2.15", 2.156},
                {"3.14", 3.141}
        });
    }
    public keep2DecimalParameterizedTest(String expected, double param0) {
        this.expected = expected;
        this.param0 = param0;
    }
    @Test
    public void add() throws Exception {
        Assert.assertEquals(expected, Compute.keep2Decimal(param0));
    }
}

我們現(xiàn)在運行這個測試用例肯定是失敗的,因為Compute.keep2Decimal()這個方法我們還沒有實現(xiàn),下面我們就要創(chuàng)建這個類和方法,并實現(xiàn)相關(guān)邏輯。

第二步:編寫實現(xiàn)

根據(jù)測試用例實現(xiàn)該方法的功能

public class Compute {
    /*保留兩位小數(shù),不能四舍五入*/
    public static String keep2Decimal(double arg0) {
        return String.format("%.2f", arg0);
    }
}
第三步:運行測試

運行單元測試,發(fā)現(xiàn)參數(shù)化測試中的第二項失敗了Compute.keep2Decimal(2.156),運行的結(jié)果是2.16,但是我們預(yù)期的結(jié)果是2.15,

第四步:改進(jìn)實現(xiàn)
public class Compute {
    /*保留兩位小數(shù),不能四舍五入*/
    public static String keep2Decimal(double arg0) {
        return String.format("%.2f", (int) (arg0 * 100) /100.0);
    }
}
第五步:重新測試

測試通過

上述例子分析

傳統(tǒng)的開發(fā)周期是由以下環(huán)節(jié)組成的:編碼、測試、(重復(fù))、提交。開發(fā)者使用TDD后則做出了一個似乎很微小但是實際上卻驚人有效的調(diào)整:測試、編碼、(重復(fù))、提交。測試推動了設(shè)計,并成為了方法的第一個客戶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評論 25 708
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動和任務(wù)的結(jié)構(gòu)性框架。軟件項目的開發(fā)包括:需求、設(shè)...
    Mr希靈閱讀 22,427評論 7 278
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動和任務(wù)的結(jié)構(gòu)性框架。軟件項目的開發(fā)包括:需求、設(shè)...
    宇文臭臭閱讀 6,882評論 5 101
  • 本文結(jié)構(gòu): 什么是 TDD 為什么要 TDD 怎么 TDD FAQ 學(xué)習(xí)路徑 延伸閱讀 什么是 TDD TDD 有...
    李浪溪_WaterLee閱讀 76,863評論 16 168
  • 轉(zhuǎn)自http://www.07net01.com/2016/10/1687441.html 我之前在《前端搭環(huán)境之...
    JasonQiao閱讀 814評論 0 1

友情鏈接更多精彩內(nèi)容