DeploymentItem по-разному ведет себя в VS2010 и VS2012

У меня есть решение VS2010, которое я пытаюсь обновить до VS2012.

У меня проблема с модульными тестами MSTest в VS2012. Все тесты включают атрибуты DeploymentItem в тестовом классе.

[TestClass]
[DeploymentItem(@"SubDir\SubDir2\models", "models")]
public class UnitTests
{ ... }

В 2010 году он правильно копирует зависимые файлы из каталога SolutionDirectory\SubDir\SubDir2\models.

В 2012 году он пытается скопировать из каталога, в котором развернуты тесты SolutionDirectory\UnitTests\bin\debug\SubDir\SubDir2\models

Ищу способ восстановить прежнее поведение.


person Jonathan Taylor    schedule 26.08.2012    source источник


Ответы (2)


Если вы создаете файл настроек теста в своем решении, включите в нем развертывание (по умолчанию развертывание отключено в настройках теста) и выберите его в обозревателе тестов (Тест -> Настройки теста -> Выбрать файл настроек теста), тогда он должен работать без изменения кода.

person Aseem Bansal    schedule 19.02.2013
comment
Сработал для меня :) Проект VS 2010 в VS 2012, не копировал мои тестовые данные, пока я не сделал это. - person Cadab; 21.02.2013

После установки vs2012 и .net 4.5 похоже, что атрибут deploymentitemattribute не синхронизирован с тем, куда он перемещает файлы и где исполняемый файл ищет файлы во время выполнения тестов.

Дешевый обходной путь:

  1. Оставьте путь развертыванияitemattribute как есть
  2. Посмотрите, куда перемещается файл
  3. Измените тестовый код, чтобы он выглядел в этом месте

До этого обновления mstest был достаточно умен, чтобы находить элементы развертывания, даже если они были перемещены в подкаталог в каталоге bin. Кажется, это уже не так.

Итак, перед обновлением строка кода вашего модульного теста может выглядеть так ...

FileInfo fi = new FileInfo("temp.txt");

После обновления строка кода вашего модульного теста может выглядеть так ...

FileInfo fi = new FileInfo("\SubDir\SubDir2\models\temp.txt");
person sjdirect    schedule 28.08.2012
comment
Я понимаю, о чем вы говорите. К сожалению, тесты, которые я пытался восстановить, были в большей степени интеграционными, чем модульные тесты, а путь к двоичному файлу был жестко запрограммирован в другом месте. Мой дешевый обходной путь включал создание ссылок на файлы в проекте и настройку их для копирования при сборке, затем я изменил свой атрибут DeploymentItem для копирования из каталога сборки. Работает, но не решает более серьезную проблему. - person Jonathan Taylor; 29.08.2012