在x64 Windows Server 2003上没有Moles测试的覆盖率

时间:2011-08-15 10:20:11

标签: c# .net windows-server-2003 moles opencover

出于某种原因,OpenCover不支持在Windows Server 2003(64位)上使用摩尔测试。我提出了一个similar question,它在我的32位Windows 7机器上解决了它,但由于某种原因在Windows Server机器上设置环境变量并没有什么区别。

CLRMONITOR_EXTERNAL_PROFILERS: 1542C21D-80C3-45E6-A56C-A9C1E4BEB7B8

x64探查器是否有不同的CLSID?或者这可能是另一个问题?

重现的步骤

使用三种方法在visual studio中创建一个新项目:

public int method1()
{
    return 1;
}

public int method2()
{
    return 2;
}

public int method3()
{
    return 3;
}

接下来创建一个像这样的测试项目:

[TestMethod()]
public void method1Test()
{
    // Test without moles
    Program target = new Program();
    int expected = 1;
    int actual = target.method1();
    Assert.AreEqual(expected, actual);
}

[TestMethod()]
[HostType("Moles")]
public void method2Test()
{
    // Test using moles
    ConsoleApplication2.Moles.MProgram.AllInstances.method2 = (instance) => { return 3; };
    Program target = new Program();

    // method3 is only called in this test
    int check = target.method3();
    int actual = target.method2();
    Assert.AreEqual(3, actual);
    Assert.AreEqual(3, check);
}

为了进行上述编译,您需要通过右键单击ConsoleApplication2参考并选择“添加Moles程序集”来“添加Moles程序集”。

使用以下命令运行OpenCover:

C:\Program Files\OpenCover>OpenCover.Console.exe 
-target:"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe" 
-targetdir:"S:\Work\ConsoleApplication2"
-targetargs:"/testcontainer:\"TestProject1\bin\Debug\TestProject1.dll\""
-filter:"+[*]*"
-output:results.xml
-mergebyhash

等效的64位机器:

C:\Program Files (x86)\OpenCover>OpenCover.Console.exe" 
-target:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"
-targetdir:"S:\Work\ConsoleApplication2"
-targetargs:"/testcontainer:\"TestProject1\bin\Debug\TestProject1.dll\""
-filter:"+[*]*"
-output:results.xml
-mergebyhash

在results.xml文件上运行ReportGenerator。

预期结果

如果成功(在我的32位Windows 7机器上),报告应显示方法3为覆盖(在method2Test中调用),如下所示:

Windows 7 32bit Report

但是,当在64位Windows Server上运行时,结果如下所示:

Windows Server 64bit Report

在这两种情况下,所有测试都通过,但是在64位Windows Server上使用Moles没有为测试选择覆盖信息。

我希望这可以更清楚地解释这个问题 - 如果您需要更多信息,请告诉我。

谢谢,杰克

1 个答案:

答案 0 :(得分:0)

我按照你的指示操作,当我使用

时,我得到了你的结果

设置CLRMONITOR_EXTERNAL_PROFILERS = 1542C21D-80C3-45E6-A56C-A9C1E4BEB7B8

但是当我将其更改为

时,我得到了所需的覆盖率结果

设置CLRMONITOR_EXTERNAL_PROFILERS = {1542C21D-80C3-45E6-A56C-A9C1E4BEB7B8}

注意:使用大括号 - 这是表达GUID的常用方式