【发布时间】:2018-09-05 13:15:41
【问题描述】:
我正在使用 MStest 测试我的控制器。
我想测试一下这个动作:
[HttpGet(Name = "GetGroups")]
public async Task<IActionResult> Get()
{
var groups = await _unitOfWork.Repository<Groupe>().GetAllAsync();
var groupsDto = Mapper.Map<IEnumerable<GroupDto>>(groups);
if (groupsDto.Count() == 0)
{
return NotFound();
}
return Ok(groupsDto);
}
此操作的一个测试如下所示:
[TestMethod]
public async Task Group_Get_Should_Return_InstanceOfTypeOkNegotiatedContentResultIEnumerableGroupDto()
{
// Arrange
moqGroupRepository.Setup(g => g.GetAllAsync(null)).ReturnsAsync(groups).Verifiable();
moqUnitOfWork.Setup(x => x.Repository<Groupe>()).Returns(moqGroupRepository.Object);
var controller = new GroupController(moqUnitOfWork.Object);
// Act
var actionResult = await controller.Get() as OkNegotiatedContentResult<IEnumerable<GroupDto>>;
// Assert
Assert.IsInstanceOfType(actionResult, typeof(OkNegotiatedContentResult<IEnumerable<GroupDto>>));
}
这里的问题是 OkNegotiatedContentResult 在 ASP.Net Core 项目测试中是未知的。
我应该用什么来测试Ok()的结果?
【问题讨论】:
-
您不必测试控制器。它并没有真正做任何事情。只需测试来自 repo 的结果。
-
@illug,测试返回类型怎么样,我认为这很重要。
-
我认为这无关紧要,不是来自控制器的回报,而是来自回购的回报。 DI 的优点之一是能够不测试控制器。如果您还需要进行身份验证,则会遇到问题。
标签: c# unit-testing visual-studio-2017 mstest asp.net-core-2.0