5

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

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

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

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

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

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

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

4

2 回答 2

4

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

  • 加载项是一个已编译的 .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代码,即使它位于不同的程序集中。

于 2014-09-29T10:20:19.970 回答
1

这是查理在谷歌群组上提供的答案。非常感谢查理! 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 会尝试注册两个不同的插件,可能会产生令人惊讶的结果。:-)

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

查理 - 显示引用的文字 -

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

于 2012-05-22T06:48:35.490 回答