По какой-то причине OpenCover не охватывает тесты с использованием родинок в Windows Server 2003 (64-битная версия) Я поднял аналогичный вопрос , который решил его на моем 32-битном компьютере с Windows 7, но по какой-то причине установка переменной среды на компьютере с Windows Server не имеет значения.
CLRMONITOR_EXTERNAL_PROFILERS: 1542C21D-80C3-45E6-A56C-A9C1E4BEB7B8
Существует ли другой CLSID для профилировщика x64? Или это может быть другая проблема?
Шаги для воспроизведения
Создайте новый проект в 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 и выбрав «Добавить сборку родинок».
Запустите 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
Запустите ReportGenerator для файла results.xml.
Ожидаемые результаты
В случае успеха (как на моем 32-битном компьютере с Windows 7) отчет должен показывать метод 3 как покрытый (он вызывается в method2Test) и выглядеть следующим образом:
Однако при запуске на 64-битном Windows Server результаты выглядят так:
В обоих случаях все тесты проходят успешно, но информация о покрытии для теста с использованием Moles на 64-битной Windows Server не собирается.
Надеюсь, это даст более четкое объяснение проблемы - дайте мне знать, если вам нужна дополнительная информация.
Спасибо, Джек