程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何实现 NUnit 的 NUnit.Engine.ITestEventListener大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何实现 NUnit 的 NUnit.ENGIne.ITestEventListener?

开发过程中遇到如何实现 NUnit 的 NUnit.ENGIne.ITestEventListener的问题如何解决?下面主要结合日常开发的经验,给出你关于如何实现 NUnit 的 NUnit.ENGIne.ITestEventListener的解决方法建议,希望对你解决如何实现 NUnit 的 NUnit.ENGIne.ITestEventListener有所启发或帮助;

我想在我的测试解决方案中使用 NUnit.ENGIne.ITestEventListener。具体来说,我会寻找运行的结束 .

我在测试 csproj 的 C# 代码中实现了接口 ITestEventListener。我在界面中设置了一个断点。在 Visual studio 中,我开始调试测试;永远不会碰到断点。然后我想知道这是否是 NUnit 引擎的事情,而 MSTest 对此一无所知。我对 MSTest 永远不会在我实现 ITestEventListener 的类中达到我的断点是否正确?

好吧,让我们尝试其他方法,例如通过使nunit3-console.exe 运行测试来写入控制台日志。我在界面中的输出从未写过任何东西 - 其他所有内容都正确写出。那么,我做错了什么?

using System;
using NUnit.ENGIne;
using NUnit.ENGIne.Extensibility;

namespace Learning.NUniTinterface
{
    [Extension]
    public class myTestListener : ITestEventListener
    {
        public voID OnTestEvent(String report)
        {
            Console.Writeline("Hello there,here is your data: ");
            Console.Writeline(report);
        }
    }
}
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>

  <ItemGroup>
    <packagereference Include="log4net" Version="2.0.12" />
    <packagereference Include="Microsoft.Extensions.Logging" Version="5.0.0" />
    <packagereference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
    <packagereference Include="NUnit" Version="3.13.1" />
    <packagereference Include="NUnit.Console" Version="3.12.0" />
    <packagereference Include="NUnit.ConsoleRunner" Version="3.12.0" />
    <packagereference Include="NUnit.ENGIne" Version="3.12.0" />
    <packagereference Include="NUnit3TestAdapter" Version="3.17.0" />
    <packagereference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
  </ItemGroup>

</Project>

解决方法

控制台运行程序和其他运行程序使用 NUnit 引擎来执行测试。它根本不涉及框架,框架也不涉及引擎。 换句话说,它们是完全独立的程序。

因此,当您扩展引擎时,您不会将扩展程序放入您的测试程序集中。您创建一个单独的程序集并构建它。通常,扩展名指的是 nunit.ENGIne.api 而不是 nunit 的其他部分。

构建扩展后,您需要将其提供给引擎使用。如何执行此操作的详细信息取决于您最初是如何安装运行器和引擎的,即是否来自 msi 包、nuget 包等。

我不会在此处列出所有替代方法,而是暂时保留它并在您发布有关如何安装控制台运行程序的信息时修改此答案。

您可以在 NUnit 文档中找到有关如何开发扩展的所有详细信息。见https://docs.nunit.org/articles/nunit-ENGIne/extensions/Index.html

,

从 NUnit Documentation 开始,您需要使用 .addins 文件来安装扩展程序:

.addins 文件用于定位引擎扩展。

并且 Console.WriteLine 可能不起作用,因为它看起来被重定向,例如可以使用记录到文件的玩具示例。

感谢@Charlie 的回答,我设法为 .net 核心制作了一个 NUnit 引擎扩展示例,作为一个单独的 dll,项目如下:

  • @H_651_2@myNunitAddon\MyNunitAddon.csproj

    <Project Sdk="Microsoft.NET.Sdk">
    
    <PropertyGroup>
      <TargetFramework>netcoreapp3.1</TargetFramework>
    </PropertyGroup>
    
    <ItemGroup>
      <PackageReference Include="NUnit" Version="3.13.1" />
      <PackageReference Include="NUnit.ENGIne" Version="3.12.0" />
    </ItemGroup>
    
    <ItemGroup>
      <None update="MyNunitAddon.addins">
        <CopyToOutputDirectory>PreserveNeWest</CopyToOutputDirectory>
      </None>
    </ItemGroup>
    
    </Project>
    
  • @H_651_2@myNunitAddon\MyNunitAddon.addins

    @H_723_3@myNunitAddon.dll
    
  • @H_651_2@myNunitAddon\myTestListener.cs

    using System.IO;
    using NUnit.ENGIne;
    using NUnit.ENGIne.Extensibility;
    
    namespace Learning.NUniTinterface
    {
        [Extension]
        public class myTestListener : ITestEventListener
        {
            private static void WriteToDummyLog(String text)
            {
                File.AppendAllLines("myTestListener.log",new []{text});
            }
    
            public void OnTestEvent(String report)
            {
                WriteToDummyLog($"Hello there,here is your data: ");
                WriteToDummyLog(report);
            }
        }
    }
    

然后一个测试项目引用这个扩展作为项目引用:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.1" />
    <PackageReference Include="NUnit" Version="3.13.1" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.17.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\MyNunitAddon\MyNunitAddon.csproj" />
  </ItemGroup>

</Project>

在此项目中运行测试后,通过 dotnet test 命令行或 Visual studio 2019,我填充了 myTestListener.log 文件。

大佬总结

以上是大佬教程为你收集整理的如何实现 NUnit 的 NUnit.Engine.ITestEventListener全部内容,希望文章能够帮你解决如何实现 NUnit 的 NUnit.Engine.ITestEventListener所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。