Есть ли способ, которым я могу получить исключение, которое было обработано инфраструктурой 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% времени я перезапускаю его, и я ничего не могу отладить без этой информации. Я также хотел бы сделать это на глобальном уровне, чтобы в случае неудачи любого теста я получал информацию в результатах теста, а не делал это для каждого отдельного теста.
Вот код, который поместит информацию об исключении в результаты теста.
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;
}
}