Отсутствие охвата тестами на родинки на 64-разрядной Windows Server 2003 - PullRequest
0 голосов
/ 15 августа 2011

По какой-то причине 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) и выглядеть следующим образом:

Windows 7 32bit Report

Однако при запуске на 64-битном Windows Server результаты выглядят так:

Windows Server 64bit Report

В обоих случаях все тесты проходят успешно, но информация о покрытии для теста с использованием Moles на 64-битной Windows Server не собирается.

Надеюсь, это даст более четкое объяснение проблемы - дайте мне знать, если вам нужна дополнительная информация.

Спасибо, Джек

1 Ответ

0 голосов
/ 18 августа 2011

Я следовал вашим инструкциям и получил ваши результаты, когда использовал

установить CLRMONITOR_EXTERNAL_PROFILERS = 1542C21D-80C3-45E6-A56C-A9C1E4BEB7B8

но я получил требуемые результаты покрытия, когда я изменил это на

установить CLRMONITOR_EXTERNAL_PROFILERS = {1542C21D-80C3-45E6-A56C-A9C1E4BEB7B8}

ПРИМЕЧАНИЕ: используемые скобки - это обычный способ выражения GUID

...