你有代码合同时需要进行单元测试吗?

时间:2016-04-12 16:27:06

标签: c# unit-testing code-contracts

如果您正在使用代码合同开发应用程序,您可能知道,这个概念是在Eiffel编程语言中引入的。

在使用System.Diagnostics.Contracts在我的C#应用​​程序中尝试此概念后,我变得非常困惑。

我的主要问题是下一个:

  

如果您有代码合同,是否真的需要进行单元测试?

单元测试框架通常无法提供的主要差异之一是可以调用私有方法(MS fakes库除shims之外)。它完成了,因为支持组成&这个想法,私有方法被公共方法调用覆盖。

至于代码合同,我可以为私有方法声明Contract.RequiresContract.Ensures

那么,为什么我需要单元测试,当我有代码契约时,哪种行为非常相似。

由于

2 个答案:

答案 0 :(得分:0)

我会说不。通过使用代码契约,您可以定义代码应该执行的操作并检查它是否正在执行此操作。单元测试在大多数情况下都做了同样的事情,所以我认为它是多余的,以至于写两者都不符合成本效益。

答案 1 :(得分:0)

您肯定需要进行单元测试。 使用代码合同,您只能进行静态合同验证。 当运行您的代码时,您可以做更多的事情。

例如,假设您正在测试依赖于IConnectionProvider的类。 GetConnection抛出后会发生什么?代码合同不会帮助您。

理想情况下,您可以使用不同的输入测试类的公共方法,并验证它的行为是否符合预期。这将帮助您找到错误,并从长远来看,设计更好的代码。