如何使用Moq aspnetcore C#xUnit模拟ActionContext
我正在尝试模拟此控制器:如何使用Moq aspnetcore C#xUnit模拟ActionContext,c#,unit-testing,moq,xunit,C#,Unit Testing,Moq,Xunit,我正在尝试模拟此控制器: 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 //
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
,并提供您自己的标题说明来验证
_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"]);