在运行测试时,如何进行单元测试以复制我的DLL和其他文件?

时间:2011-10-17 15:51:13

标签: c# unit-testing mstest

我正在开发一个应用程序,我已经为它创建了许多单元测试。具有测试类的项目取决于3个第三方DLL。当我转到测试项目的bin \ Debug文件夹时,Dll就在那里。但是当我运行测试时,DLL没有被复制到TestResult \\ Out文件夹中。

还有一个我希望复制的另一个项目的log4net.config文件。这个没有出现在测试项目的bin \ Debug文件夹中,所以这是我必须解决的另一个问题。

运行单元测试时,如何将这些文件复制?

5 个答案:

答案 0 :(得分:10)

您可以使用DeploymentItemAttribute将文件复制到bin(或其他)目录。

[TestMethod()]
[DeploymentItem("log4net.config")]
public void SomeTest()
{
   ...
}

答案 1 :(得分:5)

我们有一个包含第三方DLL的bin文件夹,它必须是构建的一部分。它们在引用中标记为“复制本地”属性。

对于单个文件,您也可以这样做 - 将“复制到输出目录”设置为true。

答案 2 :(得分:1)

我发现你的测试是否被部署到测试区域(默认情况下是true),复制本地在某些情况下不起作用,例如动态装配加载。

您可以使用runsettings文件(https://msdn.microsoft.com/en-us/library/ms182475.aspx)和

关闭此部署
<DeploymentEnabled>False</DeploymentEnabled>

或者,一个小的hack(稍微丑陋,因为它需要手动/硬编码程序集),通过使用DeploymentItem用于二进制文件(在其他答案中提到,但不是特定于根据OP处理dll):

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

建议同时执行调试/发布,具体取决于CI / Dev上使用的内容。

答案 3 :(得分:0)

这样的dll复制(除了引用它们 - 您可以说Copy Local)并将它们放在out文件夹中不应该是您的测试的一部分,而是构建/打包过程的一部分。构建脚本,对dll进行必要的复制。

答案 4 :(得分:0)

从studio调试时,在类或testmethod上使用Deployment属性将所需的DLL和配置文件复制到运行MSTests的Out文件夹中。如果从命令行运行,请使用TestSettings文件并禁用“部署”选项,并将BIN文件夹设置为工作目录。在命令行中使用/引用此TestSettings文件以运行mstest。这样,您可以在BIN文件夹中直接运行mstest,而无需将DLL转储到out目录中。再次,使用部署属性从工作室调试,测试设置将不起作用。

相关问题