При запуске mstest под OpenCover я получаю сообщение об ошибке относительно файла .vsmdi.trx

У меня возникла проблема при попытке запустить набор тестов VS10 через OpenCover, используя mstest в качестве целевого приложения. Запуск тестов непосредственно с помощью MsTest работает с этой командой:

"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe" /resultsfile:"<application_root_path>\UnitTestResults\MyProject.vsmdi.trx" /testmetadata:"MyProject.vsmdi" /testlist:"ServiceTests" /testlist:"DatabaseTests"

Однако при попытке запустить ту же команду под OpenCover, вот так:

OpenCover\Opencover.console.exe -register:user -target:"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe" -targetargs:"/resultsfile:"<application_root_path>\UnitTestResults\MyProject.vsmdi.trx" /testmetadata:"MyProject.vsmdi" /testlist:"ServiceTests" /testlist:"DatabaseTests"" -output:<application_root_path>\UnitTestResults\Coverage

он терпит неудачу со следующей ошибкой, касающейся файла .vsmdi.trx (который, как я понимаю, должен быть создан MsTest после запуска тестов):

Error occurred while loading document '<application_root_path>\UnitTestResults\MyProject.vsmdi.trx'.
Code:   0x800c0006
The system cannot locate the object specified.

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

Может ли это быть проблемой, связанной с OpenCover, так как те же параметры работают при прямом запуске с mstest?

Я проверил свои пути, и все они работают, даже тот, что в ошибке, это путь, по которому файл должен быть сгенерирован mstest.

Спасибо.


person nestedloop    schedule 01.10.2013    source источник


Ответы (1)


Похоже, вам может понадобиться избегать кавычек при передаче данных через targetargs

-targetargs:"/resultsfile:"<application...""

становится

-targetargs:"/resultsfile:\"<application...\""

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

В качестве альтернативы поместите команду для выполнения тестов в файл cmd/bat, а затем используйте opencover для ее выполнения.

person Shaun Wilde    schedule 01.10.2013
comment
Привет, Шон, и спасибо за быстрый ответ. Экранирование кавычек не сработало, так как это делается из скрипта на питоне, и они уже были правильно расставлены (двойные в одинарных ''). Более того, мой вопрос будет заключаться в том, есть ли какой-либо известный вам случай, когда целевые аргументы могут использоваться по-разному (особенно для целевого mstest) при запуске через OpenCover, чем при непосредственном запуске цели. - person nestedloop; 01.10.2013
comment
Ваше экранирование может работать в python для печати цитаты, но экранируются ли они в командной строке, т.е. что вы на самом деле выполняете в командной строке? Возможно, вам нужно \'' такое, что \ печатается. Является ли «application_root_path» частью того, что вы указали в командной строке, или это какая-то запутанная информация, поэтому мы не знаем фактических имен путей? Если первое, то вам, возможно, придется сначала перевести это, потому что ни opencover, ни ОС не поймут его. - person Shaun Wilde; 02.10.2013
comment
Команды, которые я разместил в своем вопросе, — это то, что попадает в командную строку, за исключением ‹application_root_path›, который стоит здесь как заполнитель для пути переменной (в нем нет пробелов), как это происходит на машине сборки. - person nestedloop; 02.10.2013
comment
Затем, как я уже говорил, кавычки в командной строке кажутся неправильно экранированными - если кавычки, которые находятся внутри других кавычек, не экранированы должным образом, они будут неправильно переданы в opencover и, в свою очередь, неправильно переданы в ваше приложение. - person Shaun Wilde; 03.10.2013