Настал момент, когда при написании автоматических тестов (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








