Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我怎样才能得到;复制到输出目录";使用单元测试?_C#_.net_Visual Studio 2008_Unit Testing_Mstest - Fatal编程技术网

C# 我怎样才能得到;复制到输出目录";使用单元测试?

C# 我怎样才能得到;复制到输出目录";使用单元测试?,c#,.net,visual-studio-2008,unit-testing,mstest,C#,.net,Visual Studio 2008,Unit Testing,Mstest,当我在执行测试之前构建一个单元测试项目时,测试输出被复制到TestResults文件夹,然后执行测试。我遇到的问题是,不是Debug/bin目录中的所有文件都复制到TestResults项目中 如何将复制到Debug/bin目录的文件也复制到TestResults文件夹?在Visual Studio中尝试生成后事件命令行(如果使用该IDE)。执行此操作的标准方法是在.testrunconfig文件中指定,可通过Visual Studio测试菜单或解决方案项文件夹中的“编辑测试运行配置”项访问 您

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


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

在Visual Studio中尝试生成后事件命令行(如果使用该IDE)。

执行此操作的标准方法是在
.testrunconfig
文件中指定,可通过Visual Studio测试菜单或解决方案项文件夹中的“编辑测试运行配置”项访问

您可以指定部署属性,如下图所示;此外,您还需要设置“内容”和“更新时复制”属性(没有关于更高设置的文档,但您已经设置了这些属性以使其工作

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



}

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

在.testrunconfig(.VS2010中的testsettings)中添加要部署的文件将把所有这些文件复制到每个测试输出文件夹,即使是独立运行的无关测试。如果运行一个测试,.testssettings的部署部分中列出的所有测试数据文件都将复制到测试输出文件夹

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


希望这有帮助。

我必须在
[DeploymentItem]的
测试->编辑测试设置->本地->部署下启用“启用部署”
属性开始工作。

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

在Visual Studio 2012中,简单情况下不需要DeploymentItem属性。请参阅我的答案,VS2012中的以下工作适用于包含在多个解决方案中的测试项目,无需使用testsettings文件:

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

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

xcopy /Y /S /i "$(ProjectDir)<Project_Folder_Name>\*" "$(TargetDir)<Deployment_Folder_Name>"
xcopy/Y/S/i“$(ProjectDir)\*”“$(TargetDir)”
$(ProjectDir)
$(TargetDir)
是将由VS解释的宏,因此应包括在内

是在步骤1中创建的文件夹的名称

是将在其中部署测试文件的文件夹的名称,应进行命名,以便在将多个测试项目部署到同一目录时,该文件夹是唯一的,例如
\u TestInputs

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

3) 将
[DeploymentItem(source,destination)]
属性添加到使用部署文件的每个测试方法(最佳实践)或测试类(对于懒惰或匆忙的人更容易实践,并且最容易使用以前使用的相对路径或testsettings文件更新项目)

在测试方法上,
source
是测试方法中使用的文件或目录相对于
xcopy
创建的目标目录的路径,
destination
是相对于部署目录创建的目录的路径。使测试在目标目录或部署目录中运行一致。目标路径应与没有文件引用的源路径相同。示例:
[DeploymentItem(“Example\u TestInputs\C1219TDL-2008.xml”,“Example\u TestInputs”)]
DeploymentItem
应该包含在使用该文件或目录的每个方法中

在类中,
source
destination
都是由
xcopy
在目标目录中创建的文件夹的名称;这将在运行类中的任何测试时将整个文件夹复制到部署目录。示例:
[DeploymentItem(“示例测试输入”,“示例测试输入”)]


4) 在测试方法中,您现在可以放心地访问文件和目录,无论Visual Studio当天决定将其放在何处,它们都将位于工作目录中,例如
File.Exists(“.\Example\u TestInputs\C1219TDL-2008.xml”)

希望通过提及一种方法来增强公认的答案,使其专门针对dll进行部署,而不是在CopyLocal不起作用的情况下,将其用于数据或配置等的常规方法:

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

被接受的答案是正确的,其他大多数答案也是正确的。然而,多年来我发现,如果您有大量数据文件,那么使用DeploymentAttribtue和Copy to Output的VisualStudio单元测试的Deploment系统将非常麻烦。我发现将文件保存在原始位置效果更好

我在这里的另一个答案中提供了全部细节。


希望这能有所帮助。

我是,但这似乎有点麻烦。这必须是一个相当常见的场景,我希望有一些选项或属性我没有正确设置。在VS2010中,这是:测试/编辑测试设置/本地,然后在列表中选择“部署”,选中“启用…”框并添加文件。您可能必须关闭解决方案(甚至是可视的)
[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";
}