我已经看过有关单元测试的其他文章,但没有看到实际测试异常时抛出的内容。主要目标是引发异常,并通过向助手类发送不良参数来检查堆栈跟踪的细节。测试异常并捕获异常的详细信息
由于原代码没有抛出异常,我决定做一些关于NUnit测试的在线研究,并且遇到了一段非常好的代码,这段代码比我编写的代码短得多,但用于检查错误对象。我需要能够在堆栈跟踪中存在某些字符。
本来这是什么代码看起来像,但我必须承认它是不是很漂亮:
[Test]
public void TestExceptionHandling()
{
try
{
DoExceptionScenario(new SomeCustomRadioButtonControl(), FieldManager.GetField("access_mode"));
}
catch (Exception ex)
{
Assert.IsInstanceOf(typeof(CustomException), ex);
string details = Util.GetExceptionDetails((CustomException)ex);
Assert.IsTrue(details.Contains("Detail Name=\"ControlName\" Description=\"SomeCustomRadioButtonControl\""));
}
}
,你可能看到的问题是一堆误报的方法可行。
另一种方式我修改了测试是这样的:
[Test]
public void TestExceptionHandling()
{
Assert.That(() => DoExceptionScenario(new SomeCustomRadioButtonControl(), FieldManager.GetField("access_mode")),
Throws.TypeOf<CustomException>());
}
,如果没有异常,则会失败。但是,如果有一个例外,我该如何捕获并检查其内容?沿(在if
声明将在这种情况下工作)线的东西:
[Test]
public void ShouldControlNameBeListedInStackTrace()
{
bool exceptionStatus = Assert.That(() => DoExceptionScenario(new SomeCustomRadioButtonControl(), FieldManager.GetField("access_mode")),
Throws.TypeOf<CustomException>());
if (exceptionStatus != true)
{
string details = Util.GetExceptionDetails((CustomException)ex);
Assert.IsTrue(details.Contains("detail name=\"controlname\" description=\"SomeCustomRadioButtonControl\""));
}
}
这是一件美丽的事情,我的朋友! – Risho
很高兴帮助。祝你好运! –