2016-10-17 2 views
0

У меня есть сборка TFS 2015, которая строит одно из наших приложений (это приложение ASP.NET Web API). В рамках процесса сборки он запускает наши модульные тесты.Условные тесты не работают при запуске с dotCover

У меня есть Visual Studio Tes t строительный шаг, который запускает эти модульные тесты, и все они проходят нормально.

Затем я запускаю dotCover из этой же сборки для определения покрытия кода (нет, мы не используем встроенный код, поскольку у нас нет корпоративных лицензий). Однако при запуске от dotCover все те же модульные тесты терпят неудачу.

Я использую шаг сценария для запуска пакетного файла, который вызывает dotCover следующим образом.

E: \ JetBrains \ Установки \ dotCover05 \ dotCover.exe анализ coverage.xml /LogFile=dotcover.log

Файл журнала dotCover, кажется, не дает никаких указаний относительно того, почему модульные тесты не удались.

Любые идеи, почему модульные тесты проходят при запуске из Visual Studio Test стадии сборки, а затем сбой при запуске из dotCover?

+0

Какую систему сборки вы используете? XAML или vNext? Я хотел бы воспроизвести этот вопрос на моей стороне. –

+0

Я использую vNext – DomBurf

+0

Не могу воспроизвести проблему, можете ли вы проверить настройки в своем покрытии .xml? –

ответ

0

Убедитесь, что у вашей учетной записи службы создания достаточно разрешения для запуска dotcove.exe. По вашему E:\JetBrains\Installations\dotCover05\dotCover.exe Кажется, вы не установили для все пользователи на агенте по строительству. Который должен быть установлен под %ProgramFiles(x86)%, а не% LOCALAPPDATA% \ JetBrains \ Installations.

enter image description here

Попробуйте использовать CoreInstructionSet параметр в вашем dotCover как обходной путь для вашей ситуации. Подробности см. Ниже. enter image description here

После этого попытайтесь снова запустить сборку.

enter image description here

+0

Я установил dotCover на нестандартный диск из-за ограниченного пространства на диске по умолчанию. Я пробовал добавить параметр/CoreInstructionSet = x86, но он не имеет никакого значения. У меня есть еще одна сборка, которая использует dotCover как часть сборки, и она работает довольно счастливо, поэтому кажется, что dotCover установлен и настроен правильно. Это именно эта сборка, где она терпит неудачу, и я не могу понять, почему. Как узнать, какой пользователь использует сборка для запуска сборки? Что такое настройка dorCover без учета реестра и как ее использовать? Спасибо. – DomBurf

+0

Похоже на ваш агент сборки. Используете ли вы другой агент сборки для своих двух определений сборки? Вы можете попытаться указать агента сборки. Следуйте по этой ссылке http://stackoverflow.com/questions/39341041/how-to-specify-a-build-agent-in-vnext-build/39341669#39341669 –

+0

И какая разница с вашими двумя определениями построения? Являются ли они в другом командном проекте или в том же командном проекте? –

1

кажется, что проблема связана с тем, что моя сборка использует файл XML для хранения определенных значений данных. Этот XML-файл найден VSTest при запуске под TFS, но не с помощью dotCover.

При запуске dotCover он создает папку TestResults, которая затем копирует все необходимые файлы, необходимые для запуска модульных тестов. Все файлы копируются, кроме XML-файла. Я установил файл в «Копирование всегда», поэтому не могу понять, почему этот файл не копируется. Я попытался скопировать файл вручную в виде пакетного файла, но структура папок была создана dotCover, поэтому она не существует, пока я фактически не запустил покрытие кода.

Решение заключается в том, чтобы украсить мои тестовые классы атрибутом DeploymentItem().

[TestClass] 
[DeploymentItem("File.xml")] 

Это решило мою проблему.