NUnit addin - 我是否必须在每个测试项目中包含addin实现?

时间:2012-05-21 06:21:27

标签: load nunit add-in

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

但我的问题仍未得到解答。

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

第二,有人可以给我一个更详细的解释' NUnit搜索每个测试程序集中要加载的插件'吗?

例如,我的VS2010解决方案中有两个项目,比如项目A和项目B.A是一个测试项目(里面包含'[Test]'),B是一个NUnit addin项目(包含addin安装程序,EventListener)接口实现等内部),和A引用B.这有用吗?是否会调用插件?

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

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

2 个答案:

答案 0 :(得分:4)

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

  • 加载项是一个已编译的.dll,它放在' AddIns'文件夹中。
  • 加载项代码与测试在同一个程序集中。

然而,有一种方法可以将大量的外接程序代码放在不同的程序集中,并在Test Assembly中有一个小的shim类,允许NUnit找到它,例如:

在Addin程序集中

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代码中的代码,即使它位于不同的程序集中。

答案 1 :(得分:1)

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

Re:[nunit-discuss] Re:NUnit扩展

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

  

嗨查理,

     

你能不能给我一个更详细的解释'NUnit搜索每个测试程序集中要加载的插件'?

     

例如,我的VS2010解决方案中有两个项目,比如项目A和项目B.A是一个测试项目(里面包含'[Test]'),B是一个NUnit addin项目(包含addin安装程序,EventListener)接口实现等内部),和A引用B.这有用吗?是否会调用插件?

在那种情况下,没有。 B不是测试组件。

  

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

完全

  

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

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

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

查理 - 显示引用的文字 -

  

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