我有一个包含多个MSTest项目的Visual Studio 2010解决方案。其中一个测试项目需要在特定目录中运行文件。
[TestClass]
[DeploymentItem("ReportEngine.config")]
[DeploymentItem("Report Files", "Report Files")]
public class MyReportTests { }
当我只运行此项目(或测试类)中的测试时,这些测试通过。报告文件将复制到测试执行目录。当我在解决方案中运行所有测试时,这些测试失败。报告文件不会复制到测试执行目录。
为什么会有差异,如何让两次运行部署相同的项目?
答案 0 :(得分:4)
我最初给了您说明,以确保在您的测试设置中启用了部署。你说是的。
确保为测试运行启用了部署。
- 修改“解决方案项目”文件夹中的
.testsettings
- 选择部署类别
- 选中“启用部署”选项
- 点击“应用”和“关闭”
醇>
但是,自从我上次回答以来,我了解到DeploymentItem
属性仅针对方法(然后,它似乎只适用于TestMethod
s)。它可能永远不会像你装饰class
那样工作。我也注意到你对你的问题的评论(为语法编辑)
是的,项目设置为
Copy Always
,否则项目测试运行中的DeploymentItem
将无效。
有很多discussion是否有必要使DeploymentItem
起作用。我怀疑我们还没有发现的东西是在从项目中运行测试时通过测试。请完全删除DeploymentItem
s 并尝试两次测试运行(来自项目和解决方案)并查看您获得的结果。
确保ReportEngine.config
和ReportFiles\
是您和MSTest所期望的。{1}}和$(SolutionDir)
。从“RelativeRootPath”开始解析相对文件路径。默认情况下,这是testsettings
。除非你在[DeploymentItem("ReportEngine.config")]
中覆盖它。请检查一下。
但是,默认情况下
[DeploymentItem("$(SolutionDir)\ReportEngine.config")]
扩展为类似
[DeploymentItem("D:\code\my-project\ReportEngine.config")]
然后,例如,
{{1}}
答案 1 :(得分:1)
部署项目非常出色......您是否考虑过直接使用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是否包含当前测试目录的变量...因为它似乎不参与该过程。
答案 2 :(得分:0)
似乎是一个微软的解决问题。