【问题标题】:NUnit addin - do I have to include addin implementations in each test projects?NUnit 插件 - 我必须在每个测试项目中包含插件实现吗?
【发布时间】:2012-05-21 06:21:26
【问题描述】:

我最近在这里发现了一个有用的帖子:NUnit extension

但是我的问题仍然没有得到回答。

首先,什么是“测试程序集”?

其次,谁能给我更详细的解释'NUnit 搜索每个测试程序集以查找要加载的插件'?

例如,我的 VS2010 解决方案中有两个项目,项目 A 和项目 B。A 是测试项目(内部包含“[Test]”),B 是 NUnit 插件项目(包含插件安装程序、EventListener接口实现等),并且,A 引用 B。这行得通吗?插件会被调用吗?

如果不是,我认为这意味着我必须将各种 .cs 文件(实现 NUnit 插件)直接包含在项目 A 中,而不是将它们放入单独的项目中并在测试项目中引用它。是这个意思吗?

如果是这样,另一个问题是,当我有项目 C、D、E... 也是测试项目时,我必须在每个测试项目中包含那些不同的 .cs 文件(实现 NUnit 插件) ?

【问题讨论】:

  • 我做了更多研究,发现如果我在 nunit 测试项目(比如 ABC.nunit)中包含项目 A、B、C 等,项目 B 中实现的插件适用于所有项目其他测试项目。我想这解释了“NUnit 搜索每个测试程序集以查找要加载的插件”,即使项目 B 不包含任何测试。顺便说一句,我使用的是 NUnit 2.6.0.12051。

标签: load nunit add-in


【解决方案1】:

要运行加载项,必须满足以下两个条件之一:

  • 外接程序是一个已编译的 .dll,位于“AddIns”文件夹中。
  • 插件代码与测试在同一个程序集中。

但是,有一种方法可以将大部分插件代码放在不同的程序集中,并在测试程序集中有一个小的 shim 类,以便 NUnit 找到它,例如:

在插件程序集中

public class CustomEventListener : IAddin, EventListener
{
    public bool Install(IExtensionHost host)
    {
        IExtensionPoint listeners = host.GetExtensionPoint("EventListeners");
        if (listeners == null)
            return false;

        listeners.Install(this);
        return true;
    }

    ........ <Implemented Interfaces> .......

}

在测试组装中

在任何你喜欢的地方添加这个类:

[NUnitAddin]
public class MyAddin : CustomEventListener { }

NUnit 将发现 NUnitAddin 属性并调用基本 CustomerEventListener 代码中的代码,即使它位于不同的程序集中。

【讨论】:

    【解决方案2】:

    这是查理在谷歌群组上提供的答案。非常感谢查理! https://groups.google.com/forum/?fromgroups#!topic/nunit-discuss/yTKRKf2APLI

    回复:[nunit-discuss]回复:NUnit 扩展

    2012 年 5 月 21 日星期一上午 8:13,Athrun Sun 写道:

    你好查理,

    您能否更详细地解释一下“NUnit 搜索每个测试程序集以查找要加载的插件”?

    例如,我的 VS2010 解决方案中有两个项目,项目 A 和项目 B。A 是测试项目(内部包含“[Test]”),B 是 NUnit 插件项目(包含插件安装程序、EventListener接口实现等),并且,A 引用 B。这行得通吗?插件会被调用吗?

    在那种情况下,不会。 B 不是测试程序集。

    如果不是,我假设您的意思是我必须将各种 .cs 文件(实现 NUnit 插件)直接包含在项目 A 中,而不是将它们放入单独的项目中并在测试项目中引用它。你是这个意思吗?

    没错

    如果是这样,另一个问题是,当我有项目 C、D、E... 也是测试项目时,我必须在每个测试项目中包含那些不同的 .cs 文件(实现 NUnit 插件) ?

    提供此功能是为了允许测试下的扩展 开发,所以它不是真正需要使用的问题 在多个程序集中扩展。事实上,如果你要复制 两个程序集中的代码,我想 NUnit 会尝试注册两个 不同的插件,可能会产生令人惊讶的结果。 :-)

    对于生产使用,您应该将插件安装在插件文件夹中 以正常方式。另外,最好不要引用addin 从您的代码中组装。虽然这可能并不总是导致问题, 它有时确实会导致插件被加载两次。

    查理 - 显示引用的文本 -

    要在网络上查看此讨论,请访问 https://groups.google.com/d/msg/nunit-discuss/-/a730uESbNJUJ。 - 显示引用的文本 -

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 2014-11-10
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 2011-10-20
      相关资源
      最近更新 更多