NUnit: Accessing the Failure Message in TearDown()

前端 未结 3 1334
悲哀的现实
悲哀的现实 2020-12-18 12:48

I\'m trying to log the results of automated tests run in NUnit in a small database so that data is easily accessible and more securely logged for various reasons. (There\'s

相关标签:
3条回答
  • 2020-12-18 13:24

    I believe you'll be able to get the information you need with NUnit EventListeners. I haven't used these myself, but I've had them bookmarked to do something similar to what you're trying to accomplish.

    Here's the interface you'd be working with. Hopefully your TearDown method would be called just before TestFinished, but I can't verify this.

    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);
    }
    
    0 讨论(0)
  • 2020-12-18 13:27

    NUnit 3.0 has these details contained inside of TestContext.CurrentContext.~

    Caution: In the event that you have the VS test adapter included as an extension, using the event handler will cause the tests to run twice. Once for the extension and once for the including dll required for implementing the event handler.

    0 讨论(0)
  • 2020-12-18 13:29

    For those that want some skellie code:

    [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..
    
    }
    
    0 讨论(0)
提交回复
热议问题