如何在NUnit 3中使用ITestEventListener?

How to use ITestEventListener in NUnit 3?(如何在NUnit 3中使用ITestEventListener?)
本文介绍了如何在NUnit 3中使用ITestEventListener?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要将自定义测试报告器添加到NUnit。我已经使用NUnit2执行了此操作,但现在需要使用NUnit3。

要实现报告器,我需要从框架中获取各种事件,比如测试的开始、结束和失败。

在NUnit2中,我使用NUnitHook注册我的EventListener,它工作得很好。

在NUnit3中,我需要使用扩展点机制,但是当我将扩展点添加到项目中时,VisualStudio(2012旗舰版)立即无法发现NUnit测试。

[TypeExtensionPoint(Description = "Test Reporter Extension")]
    public class MyTestEventListener : ITestEventListener
    {

        public void OnTestEvent(string report)
        {
            Console.WriteLine(report);
        }

    }

如果我从类中删除ITestEventListener实现声明,它会完美地重新发现测试。

[TypeExtensionPoint(Description = "Test Reporter Extension")]
    public class MyTestEventListener //: ITestEventListener
    {

        public void OnTestEvent(string report)
        {
            Console.WriteLine(report);
        }

    }

我做错了什么吗?有没有更好的方法来实现它?

推荐答案

您没有说要将此代码放在哪里,但我怀疑它在您的测试程序集中。如果是这样的话,那就不是它该去的地方。NUnit引擎扩展安装到NUnit引擎中,因此它们需要在单独的程序集中。一旦你有了一个单独的装配,你需要告诉发动机它在哪里。目前,您可以通过在引擎所在的目录中创建.addins类型的文件来实现这一点。(您可以修改现有文件,但这会在将来带来维护问题)

将来的版本将有更简单的方式安装外接程序,但它们将继续与您的测试完全分开。

另一个问题是您正在使用TypeExtensionPointAttribute。我最初在您的代码中没有注意到这一点,这可能是最大的错误,所以我现在添加此信息。

"ExtensionPoint"是您要扩展的东西。NUnit定义ExtensionPoints,而您创建Extenison来扩展它们。TypeExtensionPointAttribute在NUnit内部用于定义扩展点。不是你用的。您可以使用ExtensionAttribute定义您的分机。

您的分机应该定义如下:

[Extension(Description = "Test Reporter Extension", EngineVersion="3.4")]
public class MyTestEventListener : ITestEventListener
{
    public void OnTestEvent(string report)
    {
        Console.WriteLine(report);
    }
}

您没有说明您正在运行的NUnit的版本。仅从3.4版开始支持测试侦听器。目前,上面的EngineVersion属性完全是文档属性,因为3.4也是第一个识别它的版本。

NUnit文档中有一个可能有帮助的新记录:https://github.com/nunit/docs/wiki/Writing-Engine-Extensions

这篇关于如何在NUnit 3中使用ITestEventListener?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)