我在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
为空...等等)?
答案 0 :(得分:2)
是的,否则
例如:如果您仅在groupName
等于null
并且login
等于null
时测试失败,并且您的测试失败 - 您就不能确保它在正确的条件下失败。更重要的是:您甚至无法确定是否对Contract.Requires
进行了所有正确而重要的调用。
答案 1 :(得分:2)
我根本不会为这些代码合约编写任何单元测试。如果您的前提条件错误,那么同行代码审查是一种更好的方法。如果您的前提条件是正确的,那么您最终将测试的是Code Contract引擎的工作原理,而不是您的代码的工作原理。
可能值得运行集成测试来检查您的前置条件是否过于严格,但在大多数情况下,静态验证器的输出将是更好的指南。
如果一个先决条件变得特别复杂,那么就有一个单元测试它的论据。但是,在这种情况下,我很想将前置条件提取到[Pure]
方法中,然后将 单元测试。