TFS не развертывает сборку, на которую указывает ссылка, для тестирования каталога, когда на сервере сборки

У меня есть тестовый проект Coded-UI, в котором есть ссылки на другие сборки в решении. Почему-то одни сборки не копируются в директорию TestResults/Out, а другие копируются. Все сборки имеют Copy Local параметр true (хотя не знаю, действительно ли это имеет значение) и абсолютно равны по остальным параметрам. Все сборки копируются, когда я запускаю локальное тестирование с VS2010, но не на сервере сборки.

Если я использую атрибут [DeploymentItem] для принудительного развертывания этих «непослушных» сборок, они развертываются успешно.

Я не могу этого понять - я всегда думал, что если вы ссылаетесь на сборку (в разделе References Solution Explorer), эта сборка будет скопирована в TestResults/Out, а [DeploymentItem] потребуется для копирования некоторых .xml и других файлов конфигурации.


person nikita    schedule 06.03.2013    source источник
comment
Какое отношение имеют эти сборки к вашему проекту - являются ли они ссылками на проекты или статически связаны (сторонние библиотеки и т. Д.)?   -  person bryanbcook    schedule 07.03.2013
comment
Это ссылки на проекты.   -  person nikita    schedule 07.03.2013


Ответы (1)


Я видел это раньше. Ваш тестовый проект ссылается на другие проекты, но при запуске тестов вы заметите, что сборки отсутствуют в папке TestRun Out.

В отличие от других средств запуска тестов, которые запускают модульные тесты из фиксированного местоположения, MSTest копирует необходимые сборки в папку тестового запуска, в которой выполняются тесты. Дизайн позволяет сравнивать результаты тестирования, охват, выходы между прогонами тестов.

Распространенное заблуждение состоит в том, что каким-то образом настройки компиляции, такие как «Копировать локально», каким-то образом будут влиять на то, какие зависимости используются для тестирования, что попросту неверно. MSTest использует отражение для определения ссылок на сборки, необходимых для выполнения теста.

Ошибка, которую вы видите, вероятно, вызвана тем, что вы указали сборку, но тестовая сборка не использует ее напрямую. Вы можете проверить это с помощью служебной программы проверки IL (DotPeek, Reflector и т. Д.), Чтобы просмотреть ссылки на тестовые сборки. (Это часто проблема в проектах WPF, которые ссылаются на сборки в XAML.)

Чтобы исправить это, либо используйте DeploymentSettings, чтобы скопировать сборку в выходную папку; или использовать сборку в тестовом проекте. Например, добавление следующего в ваш тестовый проект будет генерировать IL, который гарантирует развертывание сборки:

var type = typeof(AssemblyNotBeingCopied.MyClass);
person bryanbcook    schedule 08.03.2013
comment
Спасибо за предложение, но это не помогло. Я добавил typeof операторы в метод тестирования, но MSTest по-прежнему не развертывает несколько сборок. - person nikita; 12.03.2013
comment
Работал у меня. Убедитесь, что тип, на который вы ссылаетесь, находится в сборке, которую вы хотите загрузить. - person Paul Taylor; 23.05.2013
comment
У меня была проблема, связанная с этим, и я нигде не мог найти ответа. Большое спасибо. Кто-нибудь знает, работает ли MSTest по-прежнему в текущих версиях? - person seso; 11.04.2018