Настал момент, когда при написании автоматических тестов (C# + NUnit + Selenium Webdriver) у меня возникла необходимость получать результат прохождения теста, после его выполнения. Т.е. мне надо было узнать успешно тест прошёл, с ошибкой или игнорировалось выполнение, а также если тест завершился с ошибкой, то какая ошибка.
Эту информацию можно использовать для любых целей. В моём случае эта информация используется, для формирования отчёта, который я генерирую самостоятельно в удобном для меня виде.
В итоге потратив энное количество времени я нашёл решение, которое сейчас и разберу.
У нас имеется структура тестов:
using System; using NUnit.Framework; using NUnit.Framework.Interfaces; using System.Collections.Generic; namespace WebTest { [TestFixture()] public class TestRegress { public static Thread potok1; [OneTimeSetUp] public void TestFixtureSetUp() {} [OneTimeTearDown] public void TestFixtureTearDown() {} [SetUp] public void SetUp() {} [TearDown] public void TearDown() {} [Test] public void DEBUG() {} } }
После выполнения каждого теста нам можно что-либо делать и сюда мы и поместим код, который будет получать результат прохождения каждого теста и сообщение об ошибке:
[TearDown] public void TearDown() { if (TestContext.CurrentContext.Result.Outcome == ResultState.Ignored) { } if ((TestContext.CurrentContext.Result.Outcome == ResultState.Failure) || (TestContext.CurrentContext.Result.Outcome == ResultState.Error)) { string error = TestContext.CurrentContext.Result.Message + "\n" + TestContext.CurrentContext.Result.StackTrace; } if (TestContext.CurrentContext.Result.Outcome == ResultState.Success) { } }
Получив данные прохождения теста, вы можете уже делать что угодно. Следующим тестом можно проверить все три состояния (поочерёдно раскомментируем требуемую строку):
[Test] public void DEBUG() { }
На текущий момент этот код работает с NUnit 3.8.1