2015-05-14 21 views
2

我的團隊中的一位同事說某些方法應該同時具備前提條件&後置條件。但關鍵在於代碼覆蓋率,這些條件直到實現了一個無效實現(在單元測試中才使用)才被調用(未測試)。讓我們以下面的例子。我們後續條件和TDD

public interface ICalculator 
{ 
    int Calculate(int x, int y); 
} 


public int GetSummary(int x, int y) 
{ 
    // preconditions 

    var result = calculator.Calculate(x, y); 

    // postconditions 

    if (result < 0) 
    { 
     **throw new Exception("...");** 
    } 

    return result; 
} 

兩個選項:

1 /刪除測試實現+後置

2 /保留兩個測試實現+後置

您能否給一些建議好嗎?

回答

4

保持前置條件和後置條件。

這裏至少需要四個測試:(pre,post)x(pass,fail)的組合。如果預期的異常被拋出,則失敗的後置條件測試將通過。

在JUnit中使用它的@Test(expected = Exception.class)註釋很容易。

對像「X必須始終爲真」這樣的一攬子聲明的同事小心。應避免所有形式的教條。理解做事的原因,並在有意義時做。

+0

難道你不是這個意思,「總是避免教條。」 ? ;-) –

+0

我認爲,作爲教條的資格......德哦! – duffymo

+0

發現我們的測試存在問題,這是嘲笑引用服務的問題(在本例中是ICalculator)。也可以嘲笑返回壞結果違反後置條件,並刪除「實施的無效實現(僅用於單元測試)」。 – fred

1

這些條件應該從設計角度來看。他們確保計算器應該工作正常,返回一個預期值範圍內的結果。

您應該看到MS代碼contracts project在那裏拍攝文檔。