【问题标题】:Does redirecting assembly binding work for unit testing with a test runner?重定向程序集绑定是否适用于使用测试运行程序进行单元测试?
【发布时间】:2010-10-02 17:15:53
【问题描述】:

好的,这是我遇到的问题的完整描述:

我正在尝试使用 NUnit ExtensionMethods,但每当我使用 TestDriven.Net 运行包含其中一种扩展方法的测试时,或者如果我只是尝试使用测试运行程序 GUI(Icarus 或 NUnit)加载程序集,我获取 FileNotFoundException。

用头撞墙并进一步挖掘我想我知道出了什么问题。提示反射器,是的,我可以看到 NUnit.Framework>ExtensionMethods.dll 引用了

nunit.framework, Version=2.4.6.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77

我当前包含的 nunit 版本是

nunit.framework, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77

现在我以前从未使用过程序集重定向,但添加具有以下行的 App.Config 似乎很简单:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <runtime>
        <assemblyBinding  xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity
                    name="nunit.framework.dll"
                    publicKeyToken="96d09a1eb7f44a77" />
                <bindingRedirect oldVersion="2.4.6.0" newVersion="2.4.8.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

据我了解,对 2.4.6 版本(本机上不存在)的调用应该会自动重定向到 2.4.8 版本。

但这不起作用,我怀疑(但尚未确认)这是因为测试运行程序不会自动读取 app.config 文件。

所以我的问题如下:

  1. 我的诊断是否正确 有问题吗?

  2. 程序集重定向是 适当的解决方案,我在做什么 对吗?

  3. 如何让它与 测试运行器?

【问题讨论】:

    标签: .net unit-testing assembly-resolution


    【解决方案1】:

    如果您将配置设置放在正确的 .config 文件中,这应该可以工作。哪个取决于您用于运行测试的环境,但 NUnit 和 TestDriven.NET 都应该支持使用 testassembly.dll.config。
    至于这是适当的解决方案,我会说是的。唯一的另一种可能性是使用发布者策略文件,但您需要用于编译 NUnit 的私钥。

    【讨论】:

    • 非常感谢,从未听说过 testassembly.dll.config,但这正是我所寻找的。在这种情况下,NUnit 扩展是开源的,只有大约 70 行代码,所以我只是打开并使用我的版本重新编译。但这是下一次的好知识。
    • @GeorgeMauer "testassembly.dll.config" 是标准 App.config 文件转换为编译时的内容。据我所知,配置默认由 .NET 框架加载,而 NUnit/TestDriven.NET 甚至不具体了解它
    • @Schneider:AFAIK 这仅适用于 *.exe.config 文件,不适用于 *.dll.config 文件,这些文件必须在创建 AppDomain 时明确指定。
    • 我还发现我必须使用/domain=multiple 开关明确告诉它您使用多个AppDomains。请参阅this doc 了解更多信息
    • 多年后回到这一点 - 正是由于这个原因,我现在几乎总是将我的测试程序集制作为控制台 exe 而不是 dll。它使使用配置文件变得更加容易 - 只需使用标准 app.config。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2013-05-07
    • 2021-10-01
    相关资源
    最近更新 更多