NUnit: написать ex.Сообщение для консоли при неизвестном характере исключения

У меня есть тест Selenium, написанный с помощью C# и NUnit framework . Во время моего теста возможны многочисленные исключения, которые могут быть брошены, и тест в конечном итоге завершится неудачей. Я хотел бы получить чью-то помощь о том, какой будет подходящий подход, чтобы написать в консоль это сообщение об исключении, где я точно не знаю, какое исключение будет брошено. См. мой текущий пример кода ниже:

[Test] //NUnit attribute
public void SomeTest(){
piece of code that might throw: 
NoSuchElementException 
TimeOutException 
NullPointerException 
ElementNotVisibleException and many many others
}

[TearDown] //NUnit attribute
public void AfterEveryTest(){
if((TestContext.CurrentContext.Result.Outcome.Equals(ResultState.Failure))||(TestContext.CurrentContext.Result.Outcome.Equals(ResultState.Error)))
{
NUnitException ex = new NUnitException ();
Console.WriteLine(ex.Message);
}
}

Когда я запускаю этот код и, например, возникает исключение NoSuchElementException, Visual Studio NUnit Console Runner отображает правильное сообщение (напримерOpenQA.Selenium.NoSuchElementException : Could not find element by: By.XPath://div[@class='name'], когда консоль пишет сообщение Exception of type 'NUnit.Framework.Internal.NUnitException' was thrown.о том, каким будет правильный способ изменить код, чтобы консоль получила абсолютно то же сообщение об ошибке, что и NUnit Console Runner. Есть ли какой-либо глобальный класс исключений или экземпляр, который передаст то же самое сообщение в консоль.WriteLine ()?

Метки

2 ответа

  1. После небольшого исследования я обнаружил, что последнее сообщение об исключении теста NUnit может быть передано простым объявлением

    string issue = TestContext.CurrentContext.Result.Message;
    Console.WriteLine(issue);
    

    И это точно напечатает то же самое сообщение, которое получает консоль Test Explorer NUnit.

  2. Это обычно ошибка, чтобы бросить исключение при обработке другого исключения, но это именно то, что вы делаете. Вы создаете исключение NUnitException (которое является внутренним для NUnit) без сообщения и без внутреннего исключения. Об этом сообщает консоль.

    Вы должны использовать teardown для очистки после любой настройки, а не для других целей. Да, многие продвинутые пользователи NUnit вытягивают трюки в teardown, но на основе того, что я вижу здесь, я не думаю, что вы хотите это сделать. Если ваша единственная цель состоит в том, чтобы NUnit сообщил об ошибке правильно, просто позвольте ему сделать свою работу и написать свои тесты, чтобы сотрудничать с ним.

    Если вы вызовете код, который вызывает непредвиденное исключение, NUnit сообщит об ошибке. Сообщение об ошибке будет содержать тип исключения и любое сообщение. Кроме того, можно преобразовать ошибку в сбой, вызвав тот же код с помощью Assert.DoesNotThrow (()=>…); В любом случае сообщение об ошибке.