我已經看過有關單元測試的其他文章,但沒有看到實際測試異常時拋出的內容。主要目標是引發異常,並通過向助手類發送不良參數來檢查堆棧跟蹤的細節。測試異常並捕獲異常的詳細信息
由於原代碼沒有拋出異常,我決定做一些關於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
很高興幫助。祝你好運! –