当我在执行测试之前建立单元测试项目时,测试输出被复制到TestResults文件夹,然后执行测试。我遇到的问题是,并非Debug/bin目录中的所有文件都复制到TestResults项目中。如何获得“复制到输出目录”以使用单元测试?
如何获取复制到Debug/bin目录的文件也复制到TestResults文件夹?
当我在执行测试之前建立单元测试项目时,测试输出被复制到TestResults文件夹,然后执行测试。我遇到的问题是,并非Debug/bin目录中的所有文件都复制到TestResults项目中。如何获得“复制到输出目录”以使用单元测试?
如何获取复制到Debug/bin目录的文件也复制到TestResults文件夹?
标准的方式来做到这一点是通过指定.testrunconfig
文件deployment items,这可以通过编辑测试运行配置项目在Visual Studio 测试菜单或解决方案访问项目文件夹。
从Visual Studio中尝试生成后事件命令行(如果使用的是IDE)。
我是,但这似乎有点破解。这必须是一个相当常见的情况,我希望只有一些选项或财产我没有适当设置。 – 2008-10-22 21:23:27
您可以指定部署属性,如下面所示的示例;你也需要设置“内容” &财产“是否有更新的复制”(没有对以后的设置没有文档,但是你已经设置的,使其工作。
[TestMethod]
[DeploymentItem("mytestdata.xml")]
public void UploadTest()
{
}
所有三个答案是正确的,这取决于您的需求。
添加文件在.testrunconfig部署(在VS2010 .testsettings)将所有这些文件复制到每个测试输出文件夹,甚至是不相关的测试,单独运行。如果你运行一个测试,所有.testssettings的部署部分中列出的测试数据文件将被复制到测试输出文件夹。
在我的测试中,我需要将预期的XML文件复制到测试输出文件夹以与实际的测试输出XML进行比较。我使用DeploymentItem属性仅复制与正在运行的测试相关的XML文件。在VS2010中,我必须在.testsettings文件中启用部署(但不添加任何路径),然后引用相对于DeploymentItem中的TestProject的XML文件路径。
希望这会有所帮助。
我必须打开Test -> Edit Test Settings -> Local -> Deployment
下的“启用部署”,[DeploymentItem]
属性才能正常工作。
我有一个类似的问题,但我不得不指向TraceAndTestImpact.testsettings文件而不是Local.testsettings文件。您可以在测试/选择活动测试设置菜单下从一个更改为另一个。
在Visual Studio 2012中,对于简单情况,您不需要DeploymentItem属性。见我的回答here
在VS2012下面的作品包含在多个解决方案,而无需使用testsettings文件测试项目:
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
。
在课上,source
和destination
都是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";
}
在VS2010中这是:测试/编辑测试设置/本地,然后在列表中选择“部署”,选中“启用...”框并添加文件。 – Marcel 2010-06-16 12:54:42
您可能需要关闭您的解决方案(甚至是Visual Studio)并在此更改正式生效之前重新打开 – RobV 2010-08-18 14:06:41
RobV,您为我创造了一天。谢谢! – 2012-02-07 17:07:01