有代码合同时是否需要单元测试?
Are unit-tests needed when you have code contracts?
如果您正在使用代码契约开发应用程序,您可能知道,这个概念是在 Eiffel
编程语言中引入的。
在我的 C# 应用程序中使用 System.Diagnostics.Contracts
尝试这个概念后,我变得非常困惑。
我的主要问题是下一个:
Are unit-tests really needed, if you have code contracts?
单元测试框架通常不提供的主要区别之一是调用私有方法的可能性(MS fakes
库及其 shims
除外)。它已经完成,因为支持组合和想法,私有方法被 public 方法调用覆盖。
至于代码契约,我可以为私有方法声明Contract.Requires
、Contract.Ensures
。
那么,为什么我需要单元测试,当我有代码合同时,其行为非常相似。
谢谢
我会说不。通过使用代码契约,您可以定义您的代码应该做什么并检查它是否在做。单元测试在大多数情况下做同样的事情,所以我认为它是多余的,以至于两者都写不划算。
您肯定需要单元测试。
使用代码合约,您只能进行静态合约验证。
当 运行ning 您的代码时,您可以做更多的事情。
例如,假设您正在测试依赖于 IConnectionProvider 的 class。当您的 GetConnection 抛出时会发生什么?代码合同不会帮助你。
理想情况下,您将使用不同的输入测试 class 的 public 方法,并验证其行为是否符合预期。这将帮助您找到错误,并在漫长的 运行 中设计出更好的代码。
如果您正在使用代码契约开发应用程序,您可能知道,这个概念是在 Eiffel
编程语言中引入的。
在我的 C# 应用程序中使用 System.Diagnostics.Contracts
尝试这个概念后,我变得非常困惑。
我的主要问题是下一个:
Are unit-tests really needed, if you have code contracts?
单元测试框架通常不提供的主要区别之一是调用私有方法的可能性(MS fakes
库及其 shims
除外)。它已经完成,因为支持组合和想法,私有方法被 public 方法调用覆盖。
至于代码契约,我可以为私有方法声明Contract.Requires
、Contract.Ensures
。
那么,为什么我需要单元测试,当我有代码合同时,其行为非常相似。
谢谢
我会说不。通过使用代码契约,您可以定义您的代码应该做什么并检查它是否在做。单元测试在大多数情况下做同样的事情,所以我认为它是多余的,以至于两者都写不划算。
您肯定需要单元测试。 使用代码合约,您只能进行静态合约验证。 当 运行ning 您的代码时,您可以做更多的事情。
例如,假设您正在测试依赖于 IConnectionProvider 的 class。当您的 GetConnection 抛出时会发生什么?代码合同不会帮助你。
理想情况下,您将使用不同的输入测试 class 的 public 方法,并验证其行为是否符合预期。这将帮助您找到错误,并在漫长的 运行 中设计出更好的代码。