nUnit在与测试相同的程序集中的扩展名

时间:2017-10-24 15:53:47

标签: c# unit-testing nunit nunit-3.0

历史:nUnit 3.我有复杂继承的测试。在SetUpOneTimeSetUp内创建了某个对象。那些方法是虚拟的。当此物体未关闭时,就会发生泄漏。

问题:该对象在TearDownOneTimeTearDown中被销毁,但只有在SetUpOneTimeSetUp成功时才会调用这些对象。因此,当异常发生在TearDownOneTimeTearDown内的某处时,就会发生泄漏。正如我所提到的,有多个继承级别,因此异常和关键对象创建可能发生在不同的类中,在不同的堆栈帧上。

我想做什么:我希望ITestEventListener在初始化完成之前对失败做出反应并清理关键对象。

我尝试了什么在我的测试程序集中我创建了这个类:

namespace My.Whatever.Tests.Web.Util
{
    [Extension(EngineVersion = "3.4")]
    public class NunitEventListener : ITestEventListener
    {
        public void OnTestEvent(string report)
        {
            Debug.WriteLine(report);
        }
    }
}

然后我尝试通过

运行测试
  • VS(nunit 3测试适配器)
  • nUnit console

似乎没有加载扩展程序。

问题:我做错了什么?

信息来源:https://github.com/nunit/docs/wiki/Event-Listenershttps://github.com/nunit/docs/wiki/Writing-Engine-Extensions

1 个答案:

答案 0 :(得分:1)

有关扩展如何定位的信息可在https://github.com/nunit/docs/wiki/Engine-Extensibility#locating-addins找到,该信息与您提及的两个参考文献中的第二个相关联。

在测试程序集中不会搜索扩展名。我们在V2中为NUnit Addins提供了一种测试扩展的简单方法,但是对于引擎扩展来说这样做有点复杂。如果我们可以做到这一点,它将是一个很好的功能,但它涉及使所有扩展能够在新的测试程序集运行时加载和卸载。这是我们的推广服务的主要内部变化。

在包含引擎程序集的目录中,您可能会找到一个或多个.addins类型的文件。是否有一个,多少以及它们包含的内容将取决于您如何安装转轮和发动机。该文件具有指向为该特定引擎副本安装的扩展的条目。有关详细信息,请参阅上面的参考页。

在两种情况下,由于.addins文件中存在通配符条目,扩展位置或多或少是自动的:

  1. 如果您使用NuGet安装控制台运行器,则会找到作为nuget软件包安装的任何扩展程序。

  2. 如果您使用Chocolatey安装控制台运行器,则会找到由chocolatey安装的所有扩展程序。

  3. 在所有其他情况下,我担心您必须手动编辑.addins文件。

    在适配器的特定情况下,没有.addins文件,因此不会加载任何扩展名。理论上,您可以手动创建此类文件并导致扩展加载,至少如果引擎安装在您有权访问的目录中。如果您使用nuget包,情况就是这样。我建议你先尝试在控制台上使用你的扩展程序,然后再尝试使用它,因为它会带来额外的复杂性。

    BTW,并非所有第三方参赛者都使用引擎。如果他们根本没有使用引擎,当然,它无法提供扩展。

    更新:我刚刚注意到您的声明TearDownOneTimeTearDown仅在SetUp or OneTimeSetUp`成功时运行。这不是一个真实的陈述。只有相应的设置为运行时才会运行这两种拆卸,无论是否成功。当然,必须编写你的拆解以允许相应的设置可能没有完成,这可能很棘手。