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

5
我有一个单元测试依赖于使用MEF的代码。当我运行测试时,MEF(我相信)试图加载单元测试执行目录中所有DLL的依赖项。
问题在于,由于某种原因,VS2010没有将/bin/debug目录中的所有DLL复制到单元测试执行目录中,我不知道为什么。这里举个例子:
单元测试抱怨无法加载程序集A,因此我包含了项目B,它具有作为依赖项的程序集A。在单元测试项目的/bin/debug文件夹中,所有DLL都在那里,但是当我查看单元测试执行目录时,程序集A不存在。
我可以逐个向单元测试项目添加DLL引用,但是我觉得不应该这样做。
你有什么想法吗?
谢谢, 马克
3个回答

4
也许使用 DeploymentItem 属性可以帮助解决问题,详见http://msdn.microsoft.com/en-us/library/ms182475.aspx

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

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

// TODO: Add test logic here

}

0

你可以将该项目添加为引用,系统将自动进行排序。右键点击添加引用,选择项目选项卡。

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


0

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

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

这里还有另一个因素,可能是MEF动态组合本质的作用。MEF的一个关键优点是它遵循插件模型,在运行时动态加载程序集:只需放置新程序集,MEF就会接收它们。因此,主应用程序的设计通常不会直接引用这些动态加载的程序集。如果您正在测试中使用MEF来动态加载测试,则必须将这些测试复制(使用测试部署)或将其作为测试项目的一部分进行引用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接