为什么VS2010没有将/ bin / debug中的所有DLL复制到单元测试目录中?

时间:2011-06-10 17:27:14

标签: visual-studio-2010 unit-testing mef

我有一个单元测试,它取决于一些使用MEF的代码。当我运行测试时,MEF(我相信)MEF尝试为单元测试的执行目录中的所有DLL加载所有相关的DLL。

问题是VS2010由于某种原因没有将所有DLL从/ bin / debug目录复制到单元测试的执行目录,我不知道为什么。这是一个例子:

单元测试抱怨是无法加载程序集A,所以我将程序集A包含的项目B作为依赖项。在单元测试项目的/ bin / debug文件夹中,所有的DLL都在那里,但是当我查看单元测试的执行目录时,程序集A不存在。

我可以开始逐个将DLL作为refs添加到单元测试项目中,但我觉得我应该这样做。

思想?

感谢, 标记

3 个答案:

答案 0 :(得分:4)

也许 DeploymentItem 属性可以提供帮助,http://msdn.microsoft.com/en-us/library/ms182475.aspx

  

对于DeploymentItem属性的参数,请指定文件夹   或要为此测试部署的文件。你可以使用一个   绝对路径或相对路径。相对路径是相对于   在.testrunco​​nfig文件中找到RelativePathRoot设置。

[TestMethod]
[DeploymentItem("MyTestProject\\testdatasource.mdb")]
public void TestMethod1()
{

// TODO: Add test logic here

}

答案 1 :(得分:0)

您可以添加项目作为参考,然后将其排序。 右键单击“添加参考项目”选项卡。

不要在teh bin \ debug文件夹中引用dll本身。

答案 2 :(得分:0)

由于测试项目只是生产代码的扩展,因此共享相同的依赖项并不罕见。在某些情况下,排除依赖项可能编译正常但在测试中的代码尝试在运行时加载缺少的依赖项时会失败(如您所发现的)。但是,如果您的测试必须在测试代码中使用依赖项,那么您将发现在没有引用该依赖项的情况下将无法编译。

另外请记住,当您使用MSTest执行TestRun时,不是复制程序集的编译过程 - 有一个后期编译步骤,将测试的依赖项复制到专门的“测试运行”文件夹,通常是 TestResults 。 Visual Studio支持名为“Test Deployment”的功能,可以将其他测试数据等复制到测试运行中。

这里发挥作用的另一个因素可能是MEF的动态组合性质。 MEF的一个主要优点是它遵循一个插件模型,该模型在运行时动态地将程序集加载到您的应用程序中:只需插入新程序集,MEF就可以选择它们。因此,主应用程序的设计通常不会直接引用这些动态加载的程序集。如果您在测试中使用MEF来动态加载测试,则必须复制这些测试(使用测试部署)或作为测试项目的一部分引用。

相关问题