Покрытие VSTESTcode нарушено после установки пакета обновления 1 (SP1) для Visual Studio 2015.

Это работало до установки SP1.

namespace Test
{
    public class Adder
    {
        public int Add(int n1, int n2)
        {
            return n1 + n2;
        }    
    }
}

namespace AdderTest
{
    [TestFixture]
    public class Class1
    {
        [Test]
        public void AddTest1()
        {
            var add = new Adder();
            var res = add.Add(2, 3);
            Assert.AreEqual(5, res);
        }
    }
}

Эта команда все еще работает после установки SP1.

vstest.console.exe/usevsixextensions:true/framework:framework45/platform:x86 AdderTest.dll

Этого нет, и он дает сбой на каждом компьютере в нашей команде, где установлен пакет обновления 1 (SP1).

vstest.console.exe/enablecodecoverage/usevsixextensions:true/framework:framework45/platform:x86 AdderTest.dll

Ошибка: активный тестовый прогон был прерван из-за неожиданного завершения процесса выполнения. Дополнительные сведения см. в журналах процесса выполнения. Если журналы не включены, включите журналы и повторите попытку.

Логи показывают следующую ошибку:

V, 10664, 11, 02.02.2016, 15:00:09.114, 2115392201142, vstest.console.exe, TestRunRequest:SendTestRunMessage: Запуск.

I, 10664, 11, 2016/02/02, 15:00:09.116, 2115392205435, vstest.console.exe, TestRunRequest:SendTestRunMessage: завершено.

E, 10664, 10, 2016/02/02, 15:00:23.722, 2115441528953, vstest.console.exe, выполнение механизма TAEF: [HRESULT: 0x800706BA] Не удалось создать хост-процесс теста для выполнения теста вне процесса. (Не удалось запустить тестовый хост-процесс с кодом выхода 0xc0000005. Не удалось установить связь с тестовым хост-процессом. (Время попытки подключения истекло.))

Похоже, что SP1 установил все новые vstest exe и DLL, а также, похоже, установил материал TAEF, хотя я использую Windows 7.

Использование NUnit 2.6 и расширения VS Nunit Test runner (также пробовал NUint 3.0 с его тестовым бегуном - все еще не работает)

Мы используем VSTEST, потому что наш код представляет собой комбинацию C++/C# и 64-битных компонентов. Нам нужны тесты объединения и покрытия.

Обновлять:

Использовал VS 2105 для написания интеллектуального теста, который не работает так же, как и покрытие.


person user1229358    schedule 02.02.2016    source источник


Ответы (2)


Это регресс в обновлении 1 VS 2015. Wex.Communication.dll вызывал GetModuleFileNameExW во время инициализации его глобальных переменных. В Windows 7 при сборе покрытия кода этот API приводил к выгрузке Wex.Communication.dll. Когда GetModuleFileNameExW возвращался, процесс завершался со сбоем, потому что DLL была выгружена. Я исправил это, чтобы дождаться полной загрузки DLL для вызова GetModuleFileNameExW, что предотвращает сбой. (Я инженер-программист, работающий над TAEF в Microsoft.) Исправление будет отправлено в одном из будущих обновлений VS 2015.

Чтобы обойти это, отключите TAEF, установив для параметра реестра с именем «Value» значение 0 в разделе HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0_Config\FeatureFlags\TestingTools\UnitTesting\Taef. (VSTest имеет две реализации в VS 2015. Когда TAEF отключен, используется старая реализация из VS 2013. Реализация на основе TAEF является новой в VS 2015.)

person Phil Deets    schedule 06.02.2016

См. эту ссылку https://github.com/mmanela/chutzpah/issues/387.

Запись mmanela от 1 сентября 2015 г.

Установка раздела реестра, упомянутого в этой ссылке, решила проблему. Microsoft сказала мне, что это обходной путь, а не исправление.

person user1229358    schedule 03.02.2016