[英]Mock function not throwing exception in c# unit test
這是我的單元測試方法
[Fact]
public void DealerSmsStatusTestTest_MustReturnInternalServerErrorIfMockMethodFails()
{
//Arrange
Mock<DBClass.IDealer> mock = new Mock<DBClass.IDealer>();
var exception = FormatterServices.GetUninitializedObject(typeof(System.Data.SqlClient.SqlException));
mock.Setup(x => x.GetDealerStatus(new System.Net.Http.HttpRequestMessage()))
.Throws((System.Data.SqlClient.SqlException)exception);
DealerSettingController controller = new DealerSettingController(mock.Object);
//Act
var result = controller.DealerSmsStatus();
//Assert
/*I will do assertion here*/
}
這是我的控制器方法
public IHttpActionResult DealerSmsStatus()
{
try
{
var result = _dealer.GetDealerStatus(Request);
return Json(new Models.Response(
Models.ResponseMessages.Success,
result)
);
}
catch (System.Data.SqlClient.SqlException)
{
return InternalServerError();
}
catch (System.Exception ex)
{
Logger.Error(ex, ex.Message, ex.StackTrace);
return InternalServerError();
}
}
當我調試測試時, GetDealerStatus()
方法應該返回SqlException
而不是它返回null 。 在控制器方法var result
總是得到null 。 任何建議都表示贊賞為什么它不起作用。我想通過GetDealerStatus()
拋出SqlException
。 這是調試模式result
值圖像
您應該在Setup
使用It.IsAny<System.Net.Http.HttpRequestMessage>()
而不是new System.Net.Http.HttpRequestMessage()
。 因為您為System.Net.Http.HttpRequestMessage
具體實例配置了您的方法,所以在測試中它不一樣。
這可能是匹配器x.GetDealerStatus(new System.Net.Http.HttpRequestMessage())
new System.Net.Http.HttpRequestMessage()
創建一個HttpRequestMessage
的新實例,它不等於您在 SUT 中傳遞給GetDealerStatus
的Request
。
通常你會使用類似的東西:
x.GetDealerStatus(It.IsAny<System.Net.Http.HttpRequestMessage>())
或者
It.Is<System.Net.Http.HttpRequestMessage>(x => whatever specific equality conditions you want to match on)
如果您想將匹配條件從“任何”縮小
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.