何らかの理由で、OpenCoverはWindows Server 2003(64ビット)でのほくろを使用したテストをカバーしていません。私は32ビットのWindows7マシンでそれを解決する同様の質問を提起しましたが、何らかの理由でWindowsServerマシンで環境変数を設定しても違いはありません。
CLRMONITOR_EXTERNAL_PROFILERS: 1542C21D-80C3-45E6-A56C-A9C1E4BEB7B8
x64プロファイラーに別のCLSIDはありますか?それとも、これは別の問題でしょうか?
再現する手順
次の3つの方法を使用して、VisualStudioで新しいプロジェクトを作成します。
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リファレンスを右クリックして[モルアセンブリの追加]を選択し、[モルアセンブリの追加]を行う必要があります。
次のコマンドで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ビットWindowsServerでMolesを使用したテストのカバレッジ情報は取得されていません。
これにより、問題がより明確に説明されることを願っています。さらに情報が必要な場合はお知らせください。
ありがとう、ジャック