【问题标题】:Methods of the class inherited from ITestListener are not started. NUnit从 ITestListener 继承的类的方法未启动。单元
【发布时间】:2022-01-16 12:13:39
【问题描述】:

我有一个侦听器接口的实现,我想保存 Web 驱动程序的屏幕截图,以及测试本身的 xml。

public class TestListener : ITestListener
{
    public void TestFinished(ITestResult result)
    {
        try
        {
            string fileName;
            if (!Directory.Exists("Logs")) Directory.CreateDirectory("Logs");

            if (Directory.GetFiles(@"Logs\").Length == 0)
            {
                fileName = @"Logs\Log_0.xml";
            }
            else
            {
                fileName = @"Logs\Log_" + System.Convert.ToString(
                    Directory.GetFiles(@"Logs\").Select(item => System.Convert.ToInt32(item.Split('_')[1]))
                    .OrderByDescending(item => item).First() + 1) + ".xml";
            }

            using (StreamWriter fstream = new StreamWriter(fileName))
            {
                fstream.Write(result.ToXml(true).OuterXml);
            }
        }
        catch {}

        if (result.ResultState.Status == TestStatus.Failed)
        {
            try
            {
                Screenshot screenshot = ((ITakesScreenshot)Driver.DriverInstance.GetInstance()).GetScreenshot();

                if (!Directory.Exists("Screenshots")) Directory.CreateDirectory("Screenshots");
                if (Directory.GetFiles(@"Screenshots\").Length == 0)
                    screenshot.SaveAsFile(@"Screenshots\Screen_0.jpg");
                else
                {
                    string fileName = @"Screenshots\Screen_" + System.Convert.ToString(
                        Directory.GetFiles(@"Screenshots\").Select(item => System.Convert.ToInt32(item.Split('_')[1]))
                        .OrderByDescending(item => item).First() + 1) + ".jpg";

                    screenshot.SaveAsFile(fileName);
                }
            }
            catch {}
        }
    }

    ....

}

我运行了一个插图测试以显示它是否有效

    [Test]
    public void test()
    {
        Assert.IsTrue(false);
    }

但不要为侦听器推送事件。 NUnit v3.12.0

【问题讨论】:

    标签: c# unit-testing nunit


    【解决方案1】:

    正如您所发现的,NUnit 框架有一个接口ITestListener,它使用它来传达有关测试的事件。但是,它不是您可以在测试中创建的东西,因为您无法让 NUnit 使用该接口调用您的方法。

    您可能将此接口与ITestEventListener 混淆了,后者是NUnit 引擎提供的接口。当然,引擎是一个不同的软件。它是运行针对 NUnit 框架编写的测试的软件。该引擎允许创建多种类型的扩展,其中一种实际上是测试事件侦听器扩展,实现了ITestEventListener

    但是,您不能通过在测试中包含其代码来实现扩展。 (见注)扩展是单独实现的,并且必须安装到您正在使用的引擎中......即您的测试运行器附带的引擎。

    我无法在此处编写完整的方法来实现引擎扩展。我会让你参考文档...

    https://docs.nunit.org/articles/nunit-engine/extensions/creating-extensions/Event-Listeners.html

    如果您查看该页面上的索引,您还会看到有关框架和引擎可扩展性的信息。一旦你吸收了它,我会针对你可能遇到的任何问题提出另一个问题。

    注意:我希望可以只在您的测试中包含该类并将其添加为一种临时扩展!但是,这几乎是不可能的架构原因......一方面,您的测试可能针对与引擎本身完全不同的运行时!

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 2021-10-23
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多