后置条件和TDD

时间:2015-05-14 11:18:43

标签: tdd code-contracts

我的团队中的一位同事表示,某些方法应该同时具备前提条件和优先级。后置条件。但重点是代码覆盖率,在实现无效实现(仅用于单元测试)之前,这些条件未被调用(未经测试)。让我们举几个例子。

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 /保持测试实施+后置条件

你能提出一些建议吗?

2 个答案:

答案 0 :(得分:4)

保持前后条件。

这里至少需要进行四次测试:(前,后)x(通过,失败)的组合。如果抛出预期的异常,则失败的后置条件测试将通过。

在JUnit中使用@Test(expected = Exception.class)注释很容易做到这一点。

小心那些做出“X必须永远是真实的”等一揽子陈述的同事。应避免使用各种形式的教条。了解做事的原因,并在有意义的时候进行。

答案 1 :(得分:1)

应从设计角度看这些条件。他们确保计算器应该正常工作,并返回一系列预期值。

您应该会看到MS代码contracts project来获取文档。