我有以下方法:
public static DateTime SubQtrs( this DateTime dt, int qtrs )
{
Contract.Requires( qtrs > -1 );
Contract.Requires( ( qtrs * 3 ) >= -120000 && ( qtrs * 3 ) <= 120000 );
// do something
}
我创建了一个参数化单元测试并使用 Pex 来进行一些单元测试。正如预期的那样,Pex 测试了合同约束并传入了违反合同的 qtrs 值。我告诉单元测试期待异常: [ExpectedException(typeof(TraceAssertionException))] 并且一切都通过了。
现在,当我使用 MS 测试工具(不带 Pex)运行单元测试时,出现错误: 描述:前提条件失败:(qtrs * 3 >= -120000 && ......
它给了我堆栈跟踪,基本上告诉我contracthelper失败了。然后我可以选择中止、重试或忽略。
无论哪种方式,测试都失败了,我得到: Failed SubQtrsThrowsTraceAssertionException818 DGALib.Extensions.Tests 测试方法 System.ExtensionMethodsTest.SubQtrsThrowsTraceAssertionException818 抛出异常 System.ArgumentOutOfRangeException,但异常 Microsoft.Pex.Framework.Exceptions.TraceAssertionException 是预期的。异常消息:System.ArgumentOutOfRangeException:月份值必须介于 +/-120000 之间。...
为什么单元测试不再识别代码合约错误?