如何使用Moq aspnetcore C#xUnit模拟ActionContext
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用Moq aspnetcore C#xUnit模拟ActionContext,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1313字,纯文字阅读大概需要2分钟。
内容图文
我正在尝试模拟此控制器:
public IActionResult List()
{
Response.Headers.Add("contentRange", "1");
Response.Headers.Add("acceptRange", "1");
return Ok();
}
通过此测试:
[Fact]
public void when_call_list_should_return_sucess()
{
//Arrange
//Act
var result = _purchaseController.List();
//Assert
Assert.Equal(200, ((ObjectResult)result).StatusCode);
}
但是我的HttpContext为空,并且发生错误,我该如何模拟ActionContext和HttpContext进行测试?
解决方法:
您可以在安装程序等中构造_purchaseController的地方执行此操作.在您的情况下,您甚至不必嘲笑它.
_purchaseController = new PurchaseController
{
ControllerContext = new ControllerContext
{
HttpContext = new DefaultHttpContext()
}
}
但是,如果您还想验证响应头,则可能会同时模拟HttpContext和预期的HttpResponse,并提供自己的HeaderDictionary进行验证.
_headers = new HeaderDictionary();
var httpResponseMock = new Mock<HttpResponse>();
httpResponseMock.Setup(mock => mock.Headers).Returns(_headers);
var httpContextMock = new Mock<HttpContext>();
httpContextMock.Setup(mock => mock.Response).Returns(httpResponseMock.Object);
_purchaseController = new PurchaseController
{
ControllerContext = new ControllerContext
{
HttpContext = httpContextMock.Object
}
}
然后可以在测试中声明标头集合
var result = _sut.List();
Assert.Equal("1", _headers["contentRange"]);
Assert.Equal("1", _headers["acceptRange"]);
内容总结
以上是互联网集市为您收集整理的如何使用Moq aspnetcore C#xUnit模拟ActionContext全部内容,希望文章能够帮你解决如何使用Moq aspnetcore C#xUnit模拟ActionContext所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。