我怎样才能得到“复制到输出目录”以使用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]
属性起作用。
所有三个答案都是正确的,这取决于你的需求。
添加要在.testrunconfig中部署的文件 (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
应包含在使用该文件或目录的每个方法中。
在类中, source
和destination
都是由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"; }