【发布时间】:2010-01-14 16:33:34
【问题描述】:
有没有一种方法可以让我使用 TestContext 或基础测试类上的其他方法来处理 MSTest 框架处理的异常?
如果在我的一个测试中发生未处理的异常,我想遍历异常中的所有项目。数据字典并将它们显示到测试结果中,以帮助我找出测试失败的原因(我们通常添加数据到异常以帮助我们在生产环境中调试,所以我想为测试做同样的事情)。
注意:我没有测试应该发生的异常(我有其他测试),我正在测试一个有效的案例,我只需要查看异常数据。
这是我正在谈论的代码示例。
[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;
}
}
【问题讨论】:
标签: c# unit-testing exception-handling mstest