我都迎合了這種情況,當一個配置密鑰尚未在我的業務邏輯設置如下:單元測試例外通過嘗試catch處理
public class Presenter
{
private readonly IView view;
public Presenter(IView view)
{
this.view = view;
}
public void DoStuff()
{
try
{
String someKey = ConfigurationManager.AppSettings["SomeKey"].ToString();
if (string.IsNullOrEmpty(someKey))
{
throw new InvalidOperationException("SomeKey not set.");
}
// do stuff
}
catch (InvalidOperationException ex)
{
// provide view with friendly error
// log error
}
}
}
我在測試的嘗試,當關鍵是這個錯誤occurrs未設置:
[TestMethod]
public void Presenter_DoStuff_Should_Throw_InvalidOperationException_When_SomeKey_Not_Supplied()
{
// Arrange
mockIView = new Mock<IView>();
presenter = new Presenter(mockIView.Object);
// Act
// Assert
// NUnit here as more precise
NUnit.Framework.Assert.Throws<InvalidOperationException>(() => presenter.DoStuff(), "SomeKey not set.");
}
如何讓我的測試通過,因爲它代表?它目前失敗,因爲try-catch爲了記錄目的而吞吞異常。測試通過沒有try-catch。這是
AppSettings["SomeKey"]
手動設置爲空字符串。其次,如何在測試中指定
someKey
爲DoStuff
爲空以便實際測試此情況而無需手動刪除密鑰設置?
任何幫助是非常感謝,因爲我是新的單元測試。
爲什麼你使用邏輯流異常?一個簡單的'if'語句來檢查配置設置是否存在也可以。例外應該用於例外行爲,而不是簡單的條件檢查。至於測試,你的方法實際上並沒有拋出異常來調用代碼,所以測試不正確。你在測試中究竟想要驗證什麼? – David