【发布时间】:2021-10-06 12:55:22
【问题描述】:
我正在尝试对控制器进行单元测试。 SomeController 继承自 BaseController。 BaseController 继承自 Microsoft.AspNetCore.Mvc.Controller。
我的 NUnit 测试失败,因为在运行我的测试时,Controller 中的属性 Response 始终为空。我的测试目前看起来像这样:
[Test]
public void GetByFilter_ShouldReturnABadRequest_WhenModelStateIsInvalid()
{
_sut.ModelState.AddModelError("SessionName", "Required");
var result = _sut.GetByFilter(_mockedFilter);
Assert.IsAssignableFrom<BadRequestObjectResult>(result);
}
_sut 由[SetUp] 使用此方法设置:
protected override void InitSut() => _sut =
new SomeController(_mockedLogger, _mockedService, _mockedRepository, _mockedHtmlSanitizer);
测试失败但运行正常的代码如下所示:
Response.Headers.Add("RowCount", result.Count().ToString());
return Ok(result);
似乎我需要做一些事情让 BaseController 设置响应。在生产中,Response 填充了 HttpDefaultResponse 的实例,但 Response 是 readonly,所以我自己无法设置。
我尝试过像这样的测试指南,但没有运气:
https://docs.microsoft.com/en-us/aspnet/web-api/overview/testing-and-debugging/unit-testing-controllers-in-web-api
我需要做什么才能正确启动控制器并通过测试?
【问题讨论】:
标签: c# asp.net asp.net-mvc unit-testing