我最近在这里发现了一篇有用的帖子:NUnit extension
但我的问题仍未得到解答。
首先,什么是“测试程序集”?
第二,有人可以给我一个更详细的解释' NUnit搜索每个测试程序集中要加载的插件'吗?
例如,我的VS2010解决方案中有两个项目,比如项目A和项目B.A是一个测试项目(里面包含'[Test]'),B是一个NUnit addin项目(包含addin安装程序,EventListener)接口实现等内部),和A引用B.这有用吗?是否会调用插件?
如果没有,我认为这意味着我必须拥有直接包含在项目A中的各种.cs文件(实现NUnit插件),而不是将它们放在一个单独的项目中并在测试项目中引用它。这是你的意思吗?
如果是这样,另一个问题是,当我有项目C,D,E ......也是测试项目时,我必须在每个测试项目中包含那些各种.cs文件(实现NUnit插件) ?
答案 0 :(得分:4)
要运行加载项,必须满足以下两个条件之一:
然而,有一种方法可以将大量的外接程序代码放在不同的程序集中,并在Test Assembly中有一个小的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
代码中的代码,即使它位于不同的程序集中。
答案 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。 - 显示引用的文字 -