【发布时间】:2020-10-02 09:04:06
【问题描述】:
这是我的单元测试方法
[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值图
【问题讨论】:
-
x.GetDealerStatus(new System.Net.Http.HttpRequestMessage())=>x.GetDealerStatus(It.IsAny<System.Net.Http.HttpRequestMessage>()).
标签: c# unit-testing exception moq