[英]With Nunit, how to test if a method has caught an exception?
我有一種將數據保存在數據庫中的方法(C#和Mysql)。 我正在使用MVP模型,所以它的作用是保存在Presenter中>保存在服務中>保存在管理器中>保存到dao中。 我在管理器中執行數據完整性控制。
我想測試我的演示者。 第一次保存測試使用錯誤的值完成,以檢查我的經理是否引發異常。 問題是我的演示者捕獲了此異常,因此我無法使用Assert.Throws<Exception>(() => {DoSave();})
因為Assert無法看到該異常。 NUnit中是否有一個Assert來檢查是否在測試代碼內引發了異常而未到達測試本身?
簡化后,它看起來像是:(演示者)
private void SaveData()
{
try
{
//Calls service who calls manager who checks data then call DAO to save.
if (MyService.SaveData(currentData, ReferentielType.ENEG))
{
//Success
}
else
{
//Failure
}
}
//Thrown by the manager if the data are incorrect
catch (DataInvalidException ex)
{
// log exception as error
TraceHelper.TraceError(ex, "The data {0} is not correct", currentData.Code);
// send a message to user
MessageContainer.Instance.SendErrorMessage("DataInvalid", BusinessError.DataInvalid, currentData.Code);
}
}
}
和我的測試:
[Test]
public void UpdateDataTest()
{
//Test setup
//making fake data
//When the var etatDuTest is different from 0, it means some of the data are invalid
//Instance of the presenter
MockView view = new MockView();
PresenterToTest presenter = new PresenterToTest(view);
//Testing with invalid values
//bad label
((MockView)((IView)presenter.View)).etatDuTest = 1;
Assert.Throws<DataInvalidException>(() => { ((MockView)((IView)presenter.View)).RaiseSaveDataClicked(); });
//Bad num eva
((MockView)((IView)presenter.View)).etatDuTest = 2;
Assert.Throws<DataInvalidException>(() => { ((MockView)((IView)presenter.View)).RaiseSaveDataClicked(); });
//Testing with everything OK
//Tout est bon logiquement.
((MockView)((IView)presenter.View)).etatDuTest = 0;
((MockView)((IView)presenter.View)).RaiseSaveDataClicked();
}
測試是否已捕獲異常本身是沒有意義的測試。 您應該測試catch塊內發生的情況,這將驗證是否捕獲到異常。
如果您可以驗證MessageContainer.Instance是否包含該DataInvalid錯誤消息,那實際上就是您的最佳選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.