Обработка исключений контекста теста MSTest
Есть ли способ, которым я могу добраться до исключения, которое было обработано инфраструктурой MSTest с использованием TestContext или какого-либо другого метода в базовом классе тестирования?
Если в одном из моих тестов возникает необработанное исключение, яЯ хотел бы прокрутить все элементы в словаре исключений. Словарь и отобразить их в результатах теста, чтобы помочь мне выяснить, почему тест не удался (мы обычно добавляем данные в исключение, чтобы помочь нам отладить в рабочей среде, поэтому я 'Я хотел бы сделать то же самое для тестирования).
Примечание. Я не проверяю, чтобы исключение было ПРЕДПОЛАГАЕТСЯ (СЛЕДУЮЩЕЕ для этого есть другие тесты), я проверяю действительный случай, мне просто нужно просмотреть данные об исключении.
Вот пример кода того, что яЯ говорю о.
[TestMethod]
public void IsFinanceDeadlineDateValid()
{
var target = new BusinessObject();
SetupBusinessObject(target);
//How can I capture this in the text context so I can display all the data
//in the exception in the test result...
var expected = 100;
try
{
Assert.AreEqual(expected, target.PerformSomeCalculationThatMayDivideByZero());
}
catch (Exception ex)
{
ex.Data.Add("SomethingImportant", "I want to see this in the test result, as its important");
ex.Data.Add("Expected", expected);
throw ex;
}
}
Я понимаю, что есть проблемы, почему я не должену нас нет такого метода инкапсуляции, но у нас также есть суб-тесты для проверки всей функциональности PerformSomeCalculation ...
Тем не менее, если тест не пройден, 99% времени я перезапускаю его, поэтому могуНичего не отлаживать без этой информации. Я также хотел бы сделать это на уровне GLOBAL, чтобы в случае неудачи какого-либо теста я получал информацию в результатах теста, а не делал это для каждого отдельного теста.
Вот код, который поместит информацию об исключении в результаты теста.
public void AddDataFromExceptionToResults(Exception ex)
{
StringBuilder whereAmI = new StringBuilder();
var holdException = ex;
while (holdException != null)
{
Console.WriteLine(whereAmI.ToString() + "--" + holdException.Message);
foreach (var item in holdException.Data.Keys)
{
Console.WriteLine(whereAmI.ToString() + "--Data--" + item + ":" + holdException.Data[item]);
}
holdException = holdException.InnerException;
}
}