Visual Studio调试器表现异常

时间:2019-06-18 03:21:40

标签: unit-testing debugging .net-core visual-studio-2017 mstest

在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语句内。

ScreenShot

1 个答案:

答案 0 :(得分:0)

Debug Selected Tests中选择Test Explorer时,您处于哪种模式? Debug mode还是Release Mode?我复制了Optimize code setting的类似问题: enter image description here

要解决此问题:

1。就像汉斯说的那样,它与抑制JIT优化有关,所以我们当然可以去Debug => Options并检查它,然后这个问题就消失了(不建议这样做,因为它会消除Optimized的优势发布...)

2。默认情况下,未选中该选项。实际上,我们不建议您一直启用它。请在解决方案资源管理器中右键单击“项目” =>“属性”以获取此页面:

enter image description here

默认情况下,对于调试模式,未选中优化代码;对于发布模式,默认情况下处于选中状态。因此,您可能在release modedebug the tests之间,或者您在debug mode中却选中了Optimize Code

因此,我的建议是在确保未选中“优化调试代码”之后,以调试模式调试测试。然后,这个问题就消失了。

只有在#2无法解决问题时,您才可以尝试检查Suppress JIT Optimization...(不推荐)

希望以上所有都对您有帮助:)