【发布时间】:2017-08-26 12:16:20
【问题描述】:
如何在不更改控制器操作中的任何代码的情况下检查作为 OkObjectResult 一部分返回的值是否为 2?
这是我的控制器操作
public IActionResult GetUserNames()
{
var users = _repository.GetUsers();
return Ok(users.Select(u => u.Name));
}
我的单元测试是这样的
[Fact]
public void GetUserNames_ValidRequest_ShouldReturnOk()
{
_repository
.Setup(r => r.GetUsers())
.Return(new List<User>
{
new User { Name = "SomeRandomName" },
new User { Name = "SomeRandomName2" }
});
var result = _controller.GetUserNames();
result.Should().BeOfType<OkObjectResult>();
// Code to check if 2 names are returned
}
我在单元测试中使用了 Mock 和 FluentAssertions。
【问题讨论】:
-
相当无意义的测试。所有这一切都是检查您的控制器的方法之一是否返回 Ok 结果。与有效请求无关。此外,除非有一些完全的白痴出现并编辑您的代码,因此它返回一个不成功的状态代码,这是一个毫无意义的测试用例 - 您至少应该对您的同事有一定程度的信心。我会更担心测试实际的业务逻辑而不是控制流。
标签: c# unit-testing asp.net-core asp.net-core-webapi