在解决方案中运行所有测试时,为什么MSTest DeploymentItem会失败?

时间:2011-05-09 16:49:36

标签: visual-studio-2010 mstest

我有一个包含多个MSTest项目的Visual Studio 2010解决方案。其中一个测试项目需要在特定目录中运行文件。

[TestClass]
[DeploymentItem("ReportEngine.config")]
[DeploymentItem("Report Files", "Report Files")]
public class MyReportTests { }

当我只运行此项目(或测试类)中的测试时,这些测试通过。报告文件将复制到测试执行目录。当我在解决方案中运行所有测试时,这些测试失败。报告文件不会复制到测试执行目录。

为什么会有差异,如何让两次运行部署相同的项目?

3 个答案:

答案 0 :(得分:4)

我最初给了您说明,以确保在您的测试设置中启用了部署。你说是的。

  

确保为测试运行启用了部署。

     
      
  1. 修改“解决方案项目”文件夹中的.testsettings
  2.   
  3. 选择部署类别
  4.   
  5. 选中“启用部署”选项
  6.   
  7. 点击“应用”和“关闭”
  8.   

但是,自从我上次回答以来,我了解到DeploymentItem属性仅针对方法(然后,它似乎只适用于TestMethod s)。它可能永远不会像你装饰class那样工作。我也注意到你对你的问题的评论(为语法编辑)

  

是的,项目设置为Copy Always,否则项目测试运行中的DeploymentItem将无效。

有很多discussion是否有必要使DeploymentItem起作用。我怀疑我们还没有发现的东西是在从项目中运行测试时通过测试。请完全删除DeploymentItem s 并尝试两次测试运行(来自项目和解决方案)并查看您获得的结果。


案例部署项目正在运行,尽管文档

确保ReportEngine.configReportFiles\是您和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)

似乎是一个微软的解决问题。