gpt4 book ai didi

c# - 如何在 NUnit 3 中使用 ITestEventListener?

转载 作者:行者123 更新时间:2023-12-04 00:06:57 27 4
gpt4 key购买 nike

我想向 NUnit 添加一个自定义测试报告器。我已经用 NUnit2 做到了,但我现在需要使用 NUnit3。

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

在 NUnit2 中,我使用 NUnitHook 注册了我的 EventListener,效果非常好。

在 NUnit3 中我需要使用扩展点机制,但是当我将扩展点添加到项目中时,VisualStudio (2012 Ultimate) 立即无法发现 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 的文件来完成此操作。 (您可以修改现有文件,但这会在将来引入维护问题)

future 的版本将有一种更简单的插件安装方式,但它们将继续与您的测试完全分开。

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

“ExtensionPoint”是您要扩展的东西。 NUnit 定义 ExtensionPoints,而您创建 Extenisons 来扩展它们。 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

关于c# - 如何在 NUnit 3 中使用 ITestEventListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38749270/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com