[英]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.