在VS 2017中,调试单元测试时,调试器遇到了一个奇怪的问题。有人可以让我知道为什么会发生以下情况。
public string TestingPurposesMethod(string name)
{
string returnVal = null;
if (name != null)
{
if (name == "Kim")
{
returnVal = "KimReturn";
}
else if (name == "James")
{
returnVal = "JamesReturn";
}
else if (name == "Wonder")
{
returnVal = "WonderReturn";
}
else
{
returnVal = "None of these";
}
return returnVal;
}
return null;
}
在通过传递'James'作为参数的单元测试中调试此方法时,将返回单元测试中所期望的“ JamesReturn”。
单步执行每行或每条代码都表明,游标或控件正在检查if,else,if,else链中的每个条件,并为returnVal分配值。
编辑:
请看下面的屏幕截图,“ name”中的值为“ James”,但尽管OzCode扩展名清楚地表明表达式求值失败(第150行的红线),但调试器仍然有趣地进入了“ Kim”的if语句内。
答案 0 :(得分:0)
在Debug Selected Tests
中选择Test Explorer
时,您处于哪种模式? Debug mode
还是Release Mode
?我复制了Optimize code setting
的类似问题:
要解决此问题:
1。就像汉斯说的那样,它与抑制JIT优化有关,所以我们当然可以去Debug => Options并检查它,然后这个问题就消失了(不建议这样做,因为它会消除Optimized的优势发布...)
2。默认情况下,未选中该选项。实际上,我们不建议您一直启用它。请在解决方案资源管理器中右键单击“项目” =>“属性”以获取此页面:
默认情况下,对于调试模式,未选中优化代码;对于发布模式,默认情况下处于选中状态。因此,您可能在release mode
到debug the tests
之间,或者您在debug mode
中却选中了Optimize Code
!
因此,我的建议是在确保未选中“优化调试代码”之后,以调试模式调试测试。然后,这个问题就消失了。
只有在#2无法解决问题时,您才可以尝试检查Suppress JIT Optimization...
(不推荐)
希望以上所有都对您有帮助:)