【问题标题】:Why doesn't VS2010 copy all DLLs in /bin/debug to the unit test directory?为什么VS2010不把/bin/debug中的所有DLL都复制到单元测试目录下?
【发布时间】:2011-06-10 17:27:13
【问题描述】:

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

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

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

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

想法?

谢谢, 标记

【问题讨论】:

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


    【解决方案1】:

    也许 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
    
    }
    

    【讨论】:

      【解决方案2】:

      您可以将项目添加为参考,它会整理出来。 右键单击添加参考项目选项卡。

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多