Настал момент, когда при написании автоматических тестов (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() { // проверяем статус выполнения текущего теста (вызывается в [TearDown]) if (TestContext.CurrentContext.Result.Outcome == ResultState.Ignored) // если игнорируется тест и не выполняется (для этого, если нужно, в коде теста пишется "Assert.Ignore()"), то... { // КОД (что делать, если тест игнорировался) } 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() { // игнорируем данный тест // Assert.Ignore(); // вызываем ошибку // Assert.True((2 + 2) == 5, "Произвольное сообщение ошибки, которое мы хотим видеть") // тест пройдёт успешно // Assert.True((2 + 2) == 4) }
На текущий момент этот код работает с NUnit 3.8.1