Модульные тесты не работают в xunit.runner.console, но проходят локально

Наша сборка TFS CI использует dotCover для запуска тестов xUnit. Однако некоторые тесты там не проходят, но локально проходят.

Я скачал dotCover.CommandLineTools и xunit.runner.console из nuget. распаковал пакеты и попытался локально запустить команду dotCover cover, как это выполняется в конвейере TFS:

.\tools\dotcover.exe cover /TargetExecutable=".\..\xunit-runner\tools\net461\xunit.console.exe"
/TargetArguments="c:\Projects\MySolution\Sources\MyTestProject\bin\Debug\MyTestProject.dll -xml c:/temp/testResultFile.xml"
/Output="c:/temp/coverageResultFile.dcvr"
/Filters='-:module=xunit.*;-:module=*UnitTests*'

Получите те же ошибки, что и в CI. Из моего исследования ошибок, которые вывод dotCover показал в неудачных тестах, кажется, что фиктивные данные не совпадают при локальном запуске тестов из VS и их запуске с помощью dotCover.

Кто-нибудь сталкивался с такой проблемой? Любое решение для этого?

EDIT: Только что попробовал еще одну вещь, запустил команду

.\xunit.console c:\Projects\MySolution\Sources\MyTestProject\bin\Debug\MyTestProject.dll и обнаружил, что это дает мне те же ошибки, что и на CI, поэтому причиной проблем является не CI и не dotCover, а xunit.runner.console.

Какие-нибудь новые моменты в этом?


person Gondil    schedule 30.07.2019    source источник


Ответы (1)


По вашему описанию и анализу. Эта проблема, похоже, не связана со стороной TFS (например, с конфигурацией задачи/конвейера сборки. Поскольку это тот же результат, когда вы напрямую запускаете команду dotCover cover локально в качестве сервера сборки TFS.

Взгляните на эту подобную проверку проблемы, если это полезно: при запуске из dotCover

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

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

Другой метод, если копирование файла не удалось: Теневое копирование в dotCover: если ваши тесты NUnit терпят неудачу во время непрерывного тестирования .

person PatrickLu-MSFT    schedule 31.07.2019
comment
Спасибо, я проверю. Пожалуйста, отредактируйте первую ссылку, которую вы указали, она относится к этому вопросу :) Я думаю, что наши макеты импортированы из jsons, поэтому я подумал, что проблема может быть в использовании файлов. Мне нужно проверить. Я совсем новичок в проекте, поэтому еще не очень знаком с ним. - person Gondil; 31.07.2019
comment
@Gondil Извините за опечатку. Исправил и обновил. Также я не знаком с dotcover, не могу помочь разобраться в первопричине. Только мог дать некоторые предложения и направления. - person PatrickLu-MSFT; 31.07.2019
comment
Спасибо, за редактирование. Я понимаю, что вы не знакомы с dotCover, я тоже :D Я тоже просто предполагаю, что с ним не так, поэтому и спрашивал здесь, больше голов, больше опыта :) Постараюсь сосредоточиться на dotCover и файлах использовать и попытаться найти решение. - person Gondil; 31.07.2019
comment
Другой член команды помог мне.. Он создал что-то вроде, скажем, Mocking FW, так что я немного потерялся в этом. До сих пор не знаю (думаю, что и мой коллега тоже), почему он не работал должным образом с xunit.runner.console. Была сделана какая-то общая инициализация макетов с использованием атрибутов C#, и она не работала при запуске через xunit.runner.console. Так что, вероятно, этот вопрос можно было бы закрыть, даже если он не имеет общего решения. - person Gondil; 06.08.2019