在VS 2012中的代码中

编辑:我刚刚与VS 2010一起尝试,并没有发生问题。 这个问题只发生在VS 2012上。难道这真的是一个错误? 这也发生在我的两个独立的笔记本电脑上,甚至在朋友的笔记本电脑上(刚刚得到最新的代码)。

首先,该问题的截图。 这种方法都是新的代码。

在这里输入图像描述

调试器正在跳过我最近签入的代码。 下面的代码中的注释说明了我调试此方法时发生的情况。 所以实际上不需要尝试和理解代码; 只是注意到代码行被跳过了。 如果您认为代码与正在调试的程序集不匹配,请耐心等待。 您会看到调试器识别新代码的位置,而不是现有代码。 而这种行为发生在两个不同的便携式计算机上,在删除磁盘上的代码并重新获得最新版本之后。 每条评论都会告诉你调试器是否击中一条线。

[TestMethod()]
[DeploymentItem("PrestoCommon.dll")]
public void ApplicationShouldBeInstalledTest_UseCase9()
{
    // Debugger hits this line
    ApplicationServer appServerAccessor = new ApplicationServer();

    // Debugger does not hit these next two lines
    PrivateObject privateObject = new PrivateObject(appServerAccessor);
    ApplicationServer appServer = ApplicationServerLogic.GetByName("server10");

    // Debugger hits this line. Weirdness: both objects are null, and after this line runs,
    // appServerAccessor is no longer null.
    appServerAccessor.Id = appServer.Id;

    // Skips this line
    ApplicationWithOverrideVariableGroup appWithValidGroup = appServer.ApplicationsWithOverrideGroup[0];

    // Debugger hits this line, but F11 doesn't take me into the method.
    appWithValidGroup.CustomVariableGroup = CustomVariableGroupLogic.GetById("CustomVariableGroups/4");

    // Skips this line
    Assert.AreEqual(true, true);
}

反汇编仅显示实际遇到的代码行。

在这里输入图像描述

现在,检查一下。 如果我添加一行新的代码,调试器就可以识别它,而其他代码行就会被调试器识别出来。 在该方法中,第二行代码是新的。

[TestMethod()]
[DeploymentItem("PrestoCommon.dll")]
public void ApplicationShouldBeInstalledTest_UseCase9()
{
    // Debugger hits this line
    ApplicationServer appServerAccessor = new ApplicationServer();

    // New line. It's recognized by the debugger, and it shows up in the disassembly.
    if (DateTime.Now > DateTime.Now.AddHours(1)) { return; }

    // Debugger does not hit these next two lines
    PrivateObject privateObject = new PrivateObject(appServerAccessor);
    ApplicationServer appServer = ApplicationServerLogic.GetByName("server10");  // Gets hit now.

    // Debugger hits this line. Weirdness: both objects are null, and after this line runs,
    // appServerAccessor is no longer null.
    appServerAccessor.Id = appServer.Id;  // No longer gets hit.

    // Skips this line (now it's getting hit)
    ApplicationWithOverrideVariableGroup appWithValidGroup = appServer.ApplicationsWithOverrideGroup[0];

    // Debugger hits this line, but F11 doesn't take me into the method. Now this gets skipped.
    appWithValidGroup.CustomVariableGroup = CustomVariableGroupLogic.GetById("CustomVariableGroups/4");

    // Skips this line. Still skipped.
    Assert.AreEqual(true, true);
}

下面是反汇编的部分快照,显示了新的代码行:

在这里输入图像描述

这怎么可能发生?

除了奇怪之外,有一次这甚至返回:

if (DateTime.Now > DateTime.Now.AddDays(1)) { return; }

我试过的东西:
- 从硬盘删除源代码并强制获得最新版本
- 修复VS 2012
- 做一些VS清理
- 使用VS 2010,更改代码,签入VS 2012的最新版本
- 重启
- 其他(不记得所有人)


这似乎是单元测试特定的。 在VS 2012中:

  • 测试>测试设置
  • 打开选定的测试设置文件
  • 数据和诊断>取消选择代码覆盖率(Visual Studio 2010)
  • 应用
  • 请注意,我有访问源代码的优势,并且我下载了Presto(http://presto.codeplex.com/)。

    链接地址: http://www.djcxy.com/p/69323.html

    上一篇: in Code in VS 2012

    下一篇: Wrapping variables in anonymous functions in PHP