如何对代码合同进行单元测试?

时间:2013-12-27 09:16:10

标签: c# unit-testing code-contracts

我在ContractClass中有这个方法:

  public UserModel GetUser(string groupName, string login) {
     Contract.Requires(groupName != null);
     Contract.Requires(groupName != string.Empty);
     Contract.Requires(login != null);
     Contract.Requires(login != string.Empty);

     return default(UserModel);
  }

你会如何测试?合同失败时,您是否测试了所有可能方案的所有组合(例如:groupName为空且login为空...等等)?

2 个答案:

答案 0 :(得分:2)

是的,否则

  • 您尚未测试所有可能的错误,
  • 并且您的测试中存在依赖关系。

例如:如果您仅在groupName等于null并且login等于null时测试失败,并且您的测试失败 - 您就不能确保它在正确的条件下失败。更重要的是:您甚至无法确定是否对Contract.Requires进行了所有正确而重要的调用。

答案 1 :(得分:2)

我根本不会为这些代码合约编写任何单元测试。如果您的前提条件错误,那么同行代码审查是一种更好的方法。如果您的前提条件是正确的,那么您最终将测试的是Code Contract引擎的工作原理,而不是您的代码的工作原理。

可能值得运行集成测试来检查您的前置条件是否过于严格,但在大多数情况下,静态验证器的输出将是更好的指南。

如果一个先决条件变得特别复杂,那么就有一个单元测试它的论据。但是,在这种情况下,我很想将前置条件提取到[Pure]方法中,然后将 单元测试