NUnit:在TearDown()中访问失败消息

本文关键字:访问 失败 消息 TearDown NUnit | 更新日期: 2023-09-27 17:53:11

我试图将在NUnit中运行的自动化测试的结果记录在一个小数据库中,以便出于各种原因可以轻松访问数据并更安全地记录。(大约有550个自动化测试,运行它们可能需要几天的时间)

我已经可以访问测试的结束状态(通过/失败/错误/取消/跳过等),但我想记录额外的细节。

我希望在TearDown()中做到这一点。

这是我能找到的最接近的东西,但没有给我一个答案:https://groups.google.com/forum/?fromgroups= !味精/nunit-discuss/lXxwECvpqFc/IbKOfQlbJe8J

想法?

NUnit:在TearDown()中访问失败消息

我相信你可以通过NUnit EventListeners获得你需要的信息。我自己没有使用过这些,但是我已经把它们收藏在书签中,可以做一些类似于你想要完成的事情。

这是你将要使用的接口。希望你的TearDown方法会在TestFinished之前被调用,但我无法验证这一点。

public interface EventListener
{
    void RunStarted(string name, int testCount );
    void RunFinished(TestResult result);
    void RunFinished(Exception exception);
    void TestStarted(TestName testName);
    void TestFinished(TestResult result);
    void SuiteStarted(TestName testName);
    void SuiteFinished(TestResult result);
    void UnhandledException(Exception exception);
    void TestOutput(TestOutput testOutput);
}

对于那些想要一些skellie代码的人:

[NUnitAddinAttribute(Type = ExtensionType.Core,
Name = "Database Addin",
Description = "Writes test results to the database")]
public class MyExtension :IAddin, EventListener
{
//some private attributes to hold important data
//you must provide the Install method
    public bool Install(IExtensionHost host)
    {
        //I also built my connection string in here
        IExtensionPoint listeners = host.GetExtensionPoint("EventListeners");
        if (listeners == null)
             return false;
        listeners.Install(this);
        return true;
    }
//you must also provide all the event handlers, 
//but they don't have to actually do anything if they are not used.
//e.g.
    public void TestStarted(NUnit.Core.TestName testName)
    {
        //This saved the start time of the test
        _start =  DateTime.Now;
    }
    public void TestFinished(NUnit.Core.TestResult result)
    {
        //LogTest connected to the databse and executed a proc to 
        //insert the log, was quite simple
        LogTest((result.Message == null? "" : result.Message),
            result.ResultState,
            result.Name,
            _start,
            DateTime.Now);
    }
    public void TestOutput(NUnit.Core.TestOutput testOutput)
    {
         //this is one of the unused event handlers, it remains empty.
    }
    //etc..
}

NUnit 3.0将这些细节包含在TestContext.CurrentContext.~

警告:如果您将VS测试适配器包含为扩展,则使用事件处理程序将导致测试运行两次。一次用于扩展,一次用于实现事件处理程序所需的包含dll。

相关文章: