出于某种原因,OpenCover 没有涵盖在 Windows Server 2003(64 位)上使用 moles 的测试。我提出了一个类似的问题,在我的 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 机器上),报告应显示 method3 已覆盖(在 method2Test 中调用),如下所示:
但是,在 64 位 Windows Server 上运行时,结果如下所示:
在这两种情况下,所有测试都通过了,但是在 64 位 Windows Server 上使用 Moles 的测试没有获取覆盖信息。
我希望这可以更清楚地解释问题 - 如果您需要更多信息,请告诉我。
谢谢,杰克