Ответ 1
Кажется, проблема с исправлением в Microsoft не удалась.
У меня есть решение Visual Studio 2010 с несколькими проектами MSTest. Один из тестовых проектов нуждается в файле в определенном каталоге для запуска.
[TestClass]
[DeploymentItem("ReportEngine.config")]
[DeploymentItem("Report Files", "Report Files")]
public class MyReportTests { }
Эти тесты проходят, когда я запускаю только тесты в этом проекте (или тестовом классе). Файлы отчета копируются в каталог выполнения теста. Эти тесты терпят неудачу, когда я запускаю все тесты в решении. Файлы отчетов не копируются в каталог выполнения теста.
Почему существует разница, и как сделать два запуска разворачивать одни и те же элементы?
Кажется, проблема с исправлением в Microsoft не удалась.
Я изначально дал вам инструкции для обеспечения того, чтобы развертывание было включено в ваших тестовых настройках. Вы сказали, что это так.
Убедитесь, что для пробного запуска установлено развертывание.
- Отредактируйте
.testsettings
в папке Solution Items- Выберите категорию развертывания
- Установите флажок "Включить развертывание"
- Нажмите "Применить" и "Закрыть"
Однако, поскольку в прошлый раз я ответил, я узнал, что атрибут DeploymentItem
предназначен только для методов (а затем, похоже, работает только на TestMethod
s). Он никогда бы не работал так, как вы его украшаете class
. Я также заметил ваш комментарий к вашему вопросу (отредактирован для грамматики)
Да, элементы имеют значение
Copy Always
, в противном случаеDeploymentItem
в прогоне тестирования проекта не будет работать.
Там много обсуждения, нужно ли это или нет, чтобы сделать работу DeploymentItem
. Я подозреваю, что что-то, что мы еще не определили, проходит тестирование при запуске их из проекта. Удалите DeploymentItem
полностью и попробуйте выполнить два тестовых прогона (из проекта и из решения) и посмотрите, какие результаты вы получите.
Убедитесь, что ReportEngine.config
и ReportFiles\
находятся там, где вы и MSTest ожидаете их. Относительные пути к файлам разрешаются, начиная с "RelativeRootPath". По умолчанию, это $(SolutionDir)
. Если вы не отмените его в testsettings
. Пожалуйста, проверьте это.
Но по умолчанию
[DeploymentItem("ReportEngine.config")]
расширяется до значения
[DeploymentItem("$(SolutionDir)\ReportEngine.config")]
то, например, на
[DeploymentItem("D:\code\my-project\ReportEngine.config")]
Элементы развертывания, как известно, ошибочны... Рассматривали ли вы использование MSBuild и редактирование файла тестового проекта .csproj
напрямую?
<Target Name="AfterBuild">
<CallTarget Targets="DeployReportFiles" />
</Target>
<Target Name="DeployReportFiles">
<CreateItem Include="$(SolutionDir)\Report Files\**\*">
<Output TaskParameter="Include" ItemName="OutputFiles" />
</CreateItem>
<Copy SourceFiles="@(OutputFiles)"
DestinationFiles="@(OutputFiles->'$(???)\Report Files\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
Я не знаю, содержит ли MSBuild переменную для текущей тестовой директории... поскольку она не участвует в процессе.