¿Hay alguna forma de que pueda acceder a la excepción manejada por la estructura MSTest usando TestContext o algún otro método en una clase de prueba base?MSTest Test Context Exception Handling
Si se produce una excepción no controlada en una de mis pruebas, me gustaría examinar todos los elementos del diccionario de excepción.Data y mostrarlos al resultado de la prueba para ayudarme a descubrir por qué falló la prueba (usualmente agregue datos a la excepción para ayudarnos a depurar en el entorno de producción, por lo que me gustaría hacer lo mismo para las pruebas).
Nota: No estoy probando que SE SUPONE UNA EXCEPCIÓN A HAPPEN (tengo otras pruebas para eso), estoy probando un caso válido, solo necesito ver los datos de excepción.
Aquí hay un ejemplo de código de lo que estoy hablando.
[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;
}
}
que entender que hay cuestiones en torno a eso que probablemente no debería tener un procedimiento de este tipo de encapsulación, pero también tenemos pruebas Sub Para probar toda la funcionalidad de PerformSomeCalculation ...
Sin embargo, si la prueba falla, el 99% de las veces, vuelvo a ejecutar, así que no puedo depurar nada sin esta información. También me gustaría hacer esto a nivel GLOBAL, de modo que si alguna prueba falla, obtengo la información en los resultados de la prueba, en lugar de hacerlo para cada prueba individual.
Aquí está el código que pondría la información de excepción en los resultados de la prueba.
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;
}
}
Véase también: http://stackoverflow.com/questions/37660311/method-for-handling-exceptions-in-mstest/39208343#39208343 – Almund