我怎样才能得到“复制到输出目录”以使用unit testing?

在执行testing之前构buildunit testing项目时,将testing输出复制到TestResults文件夹,然后执行testing。 我遇到的问题是不是Debug / bin目录中的所有文件都复制到TestResults项目中。

我怎样才能得到一个复制到Debug / bin目录的文件也被复制到TestResults文件夹?

执行此操作的标准方法是在.testrunconfig文件中指定部署项目 ,可以通过Visual Studio“ testing”菜单中的“ 编辑testing运行configuration”项或“ 解决scheme项目”文件夹访问这些项目

您可以指定部署属性,如下面所示的示例; 此外,您还需要设置“内容”和“如果新的更新”属性(后面的设置没有任何文档,但您已经设置了它们的工作。

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

我不得不打开Test -> Edit Test Settings -> Local -> Deployment下的“启用部署”,以使[DeploymentItem]属性起作用。

所有三个答案都是正确的,这取决于你的需求。

添加要在.testrunco​​nfig中部署的文件 (VS2010中的.testsettings )将会将所有这些文件复制到每个testing输出文件夹,即使是不相关的testing也是孤立运行的。 如果运行一个testing,.testssettings的部署部分中列出的所有testing数据文件将被复制到testing输出文件夹。

在我的testing中,我需要将预期的XML文件复制到testing输出文件夹,以便与实际的testing输出XML进行比较。 我使用DeploymentItem属性只复制与正在运行的testing相关的XML文件。 在VS2010中,我不得不在.testsettings文件中启用部署(但不添加任何path),然后引用相对于DeploymentItem中的TestProject的XML文件path。

希望这可以帮助。

我有一个类似的问题,但我不得不指向TraceAndTestImpact.testsettings文件而不是Local.testsettings文件。 在Test / Select Active Test Settings(testing/select活动testing设置)菜单下,您可以从一个变为另一个。

以下工作适用于包含在多个解决scheme中的testing项目,而不使用testing设置文件:

1)将您想要部署的文件和文件夹排列到testing项目目录中的文件夹中。

2)在项目属性中,创build一个后期构build步骤

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

$(ProjectDir)$(TargetDir)是由VS解释的macros,应该包含在内。

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

<Deployment_Folder_Name>是将在其中部署testing文件的文件夹的名称,并且应命名,以便在将多个testing项目部署到相同的目录(例如<Project_Name>_TestInputs时它将是唯一的。

testing共享位置的文件也应复制到目标目录部署文件夹,以限制testing交互。 提供相对于$(ProjectDir)macros的源path。 例如"$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml"

3)将[DeploymentItem(source, destination)]属性添加到使用部署文件的每个testing方法(最佳实践)或testing类(对于懒惰或匆忙的更容易练习,以及更新项目的最简单方法以前使用的相对path或testing设置文件)。

在testing方法中, source是由xcopy创build的相对于目标目录的testing方法中使用的文件或目录的path, destination是相对于部署目录创build它的目录的path。 以便testing在目标目录或部署目录中运行一致。 目标path应该与没有文件引用的源path相同。 示例: [DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]DeploymentItem应包含在使用该文件或目录的每个方法中。

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

4)在testing方法中,您现在可以放心地访问文件和目录,无论Visual Studio当天决定放置哪个文件,它们都将位于工作目录中,例如File.Exists(".\Example_TestInputs\C1219TDL-2008.xml")

想通过提到一种方法来增强接受的答案,特别是针对dll的部署,而不是将其用于数据或configuration等的常规方法,以适应CopyLocal不起作用的情况:

 [DeploymentItem("bin\\release\\iRock.dll")] [DeploymentItem("bin\\debug\\iRock.dll")] 

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

在Visual Studio 2012中,对于简单情况,您不需要DeploymentItem属性。 在这里看到我的答案

 [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"; }