如何让“复制到输出目录”与单元测试一起工作?

当我在执行测试之前构建单元测试项目时,测试输出被复制到 TestResults 文件夹,然后执行测试。我遇到的问题是,并非 Debug/bin 目录中的所有文件都被复制到 TestResults 项目中。

如何将复制到 Debug/bin 目录的文件也复制到 TestResults 文件夹?

74513 次浏览

在 Visual Studio 中尝试使用 Post-Build 事件命令行(如果您正在使用该 IDE)。

这样做的标准方法是在 .testrunconfig文件中指定 部署项目,可以通过 Visual Studio < em > Test 菜单中的 编辑测试运行配置项或 解决方案项文件夹访问该文件。

您可以像下面的示例一样指定部署属性; 还需要设置“ Content”& “ Copy if new”属性(后面的设置没有文档,但是您已经设置了这些属性以使其工作。

[TestMethod]
[DeploymentItem("mytestdata.xml")]
public void UploadTest()
{






}

根据您的需要,这三个答案都是正确的。

添加要在 。 testrunconfig中部署的文件(。将所有这些文件复制到每个测试输出文件夹,甚至对于独立运行的不相关测试也是如此。部署部分中列出的所有测试数据文件。Testssets 将被复制到 test output 文件夹。

在我的测试中,我需要将一个期望的 XML 文件复制到测试输出文件夹,以便与实际的测试输出 XML 进行比较。我使用 DeploymentItem 属性只复制与正在运行的测试相关的 XML 文件。在 VS2010中,我必须在。Testtings 文件(但不添加任何路径) ,然后在 DeploymentItem 中引用相对于 TestProject 的 XML 文件路径。

希望这个能帮上忙。

我必须在 Test -> Edit Test Settings -> Local -> Deployment下打开“ Enable Deployment”才能使用 [DeploymentItem]属性。

我也遇到过类似的问题,但是我的问题与指向 TraceAndTestImpact.testtings 文件而不是 Local.testtings 文件有关。可以在“测试/选择活动测试设置”菜单下从一个设置更改为另一个设置。

在 VisualStudio2012中,对于简单的情况,您不需要 DeploymentItem 属性

在 VS2012中,以下工作适用于包含在多个解决方案中的测试项目,而不使用 testsetup 文件:

1)将要部署的文件和文件夹排列到测试项目目录中的文件夹中。

2)在项目属性中,创建后期生成步骤

xcopy /Y /S /i "$(ProjectDir)<Project_Folder_Name>\*" "$(TargetDir)<Deployment_Folder_Name>"

$(ProjectDir)$(TargetDir)是将由 VS 解释的宏,应该包括在内。

<Project_Folder_Name>是在步骤1中创建的文件夹的名称。

<Deployment_Folder_Name>是将要部署测试文件的文件夹的名称,应该对其命名,以便在将多个测试项目部署到同一目录(例如 <Project_Name>_TestInputs)时,它是唯一的。

还应将共享位置中的测试文件复制到目标目录部署文件夹,以限制测试交互。提供相对于 $(ProjectDir)宏的源路径。例如 "$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml"

3)在每个使用部署文件的测试方法(最佳实践)或测试类中添加一个 [DeploymentItem(source, destination)]属性(对于懒惰或匆忙的人来说更容易实践,并且最简单的方法就是更新项目之前使用的相对路径或测试设置文件)。

在测试方法中,source是测试方法中使用的文件或目录相对于由 xcopy创建的目标目录的路径,而 destination是将在其中创建的目录相对于部署目录的路径。这样,测试可以在目标目录或部署目录中一致地运行。目标路径应该与没有文件引用的源路径相同。例子: [DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]DeploymentItem应该包含在每个使用该文件或目录的方法中。

在类中,sourcedestination都是由 xcopy在目标目录中创建的文件夹的名称; 当运行类中的任何测试时,这将把整个文件夹复制到部署目录。例子: [DeploymentItem("Example_TestInputs","Example_TestInputs")]

4)在测试方法中,你现在可以自信地访问文件和目录,不管 Visual Studio 当天决定把它们放在哪个工作目录,例如 File.Exists(".\Example_TestInputs\C1219TDL-2008.xml")

希望通过提及一种方法来增强可接受的答案,这种方法是专门针对 dll 部署的,而不是针对 CopyLocal 无法工作的情况使用数据或配置等常规方法:

[DeploymentItem("bin\\release\\iRock.dll")]
[DeploymentItem("bin\\debug\\iRock.dll")]
[TestMethod]
[DeploymentItem("ProjectName/Folder/SubFolder/file.xml", "Folder/Subfolder")]
public void YourTestMethod()
{
// in the method you are testing you should have this:
var filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) + "/Folder/Subfolder/file.xml";
}

被接受的答案是正确的,其他大多数答案也是正确的。然而,多年来我发现,如果您有大量的数据文件,那么使用 DeploymentAttribute 部署属性复制到输出的 VisualStudio 单元测试的 Depment 系统会很麻烦。我发现把文件保存在原来的位置效果更好。

完整的细节在我的其他答案在这里。 Https://stackoverflow.com/a/53004985/2989655

希望这个能帮上忙。