在运行测试时如何获取unit testing来复制我的DLL和其他文件?

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

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

运行unit testing时如何将这些文件复制?

托尼

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

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

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

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

我发现如果您的测试部署到测试区域(默认情况下为true),则复制本地将无法在某些情况下工作,例如动态程序集加载。

您可以使用runsettings文件( https://msdn.microsoft.com/en-us/library/ms182475.aspx )关闭此部署。

 False 

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

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

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

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

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