我正在尝试调试大约 30% 的时间失败的单元测试。这似乎是某种时间问题,因为不幸的是,当我在代码中有断点时它永远不会失败。
因此,我在有问题的断言处设置了一个条件断点,该断点会在断言为假时触发。正如预期的那样,我大约有 1/3 的时间到达了断点。但是,当我实际检查表达式的值时,一切看起来都还不错。而且,果然,如果我点击继续,测试成功。
谁能帮我理解为什么会这样?如果另一个线程正在修改该值,当我到达断点时,线程不会停止吗?或者是否有可能发生这样的事情:
- 检查条件...评估为真
- 另一个线程修改变量
- 休息
我真的不是在寻找针对我的问题的具体解决方案(有太多代码可以合理地发布,或者希望任何人都能艰难地完成)。我只是在寻找有关条件断点如何工作的一般输入,以及可能发生这种情况的原因。
注意:我使用的是 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));
}