我试图调试大约30%的时间内失败的单元测试。这似乎是某种时机问题,因为不幸的是,当我在代码中有一个断点时,它永远不会失败。为什么在一个断点后变量的值会改变?
所以,我在有问题的断言中设置了一个条件断点,当断言将是错误时触发。如预期的那样,我大约三分之一的时间点击了断点。但是,当我真正检查表达的价值时,一切都看起来不错。而且,果然,如果我继续下去,测试会成功。
任何人都可以帮助我理解为什么这可能是这种情况?如果另一个线程正在修改该值,当我打断点时线程是否会停止?或者是有可能这样的事情正在发生:
- 检查条件...评价为真
- 另一个线程修改变量
- 歇
我真的不是在寻找特定的我的问题的解决方案(有太多的代码合理发布,或期望任何人跋涉)。我只是在寻找关于条件断点如何工作的一般性输入以及这种事情可能发生的原因。
注意:我使用的是Visual Studio 2012(和.NET 4.0 C#,如果它很重要)。
另请注意:
这里是失败的断言:
foreach (KeyValuePair<Guid, DateTime> time in state.Times) {
Assert.IsTrue(time.Value > DateTime.Now.AddYears(2) && time.Value <= DateTime.Now.AddYears(3));
}
代码是什么样的? – ChrisBint
我真的不认为它与断点有什么关系。当你点击一个断点时,所有的执行都会停止。 – climbage
你有任何其他线程改变这个值吗? – MattW