C# 单元测试-控制器操作返回的断言对象
在不更改控制器操作中的任何代码的情况下,如何检查作为OkObjectResult一部分返回的值的计数是否为2 这是我的控制器动作C# 单元测试-控制器操作返回的断言对象,c#,unit-testing,asp.net-core,asp.net-core-webapi,C#,Unit Testing,Asp.net Core,Asp.net Core Webapi,在不更改控制器操作中的任何代码的情况下,如何检查作为OkObjectResult一部分返回的值的计数是否为2 这是我的控制器动作 public IActionResult GetUserNames() { var users = _repository.GetUsers(); return Ok(users.Select(u => u.Name)); } 我的单元测试是这样的 [Fact] public void GetUserNames_ValidRequest_Sho
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
}
[事实]
public void GetUserNames\u ValidRequest\u ShouldReturnOk()
{
_存储库
.Setup(r=>r.GetUsers())
.返回(新列表)
{
新用户{Name=“SomeRandomName”},
新用户{Name=“SomeRandomName2”}
});
var result=_controller.GetUserNames();
result.Should().BeOfType();
//用于检查是否返回了2个名称的代码
}
我在单元测试中使用模拟和FluentAssertions。您应该能够执行以下操作:
var objectResult = Assert.IsType<OkObjectResult>(result);
var model = Assert.IsAssignableFrom<List<string>>(objectResult.Value);
Assert.Equal(2, model.Count);
var objectResult=Assert.IsType(结果);
var model=Assert.IsAssignableFrom(objectResult.Value);
Assert.Equal(2,model.Count);
毫无意义的测试。所有这些只是检查控制器的方法是否返回Ok结果。与拥有有效请求无关。此外,除非出现一些完全愚蠢的人,并编辑您的代码,这样它会返回一个不成功的状态代码。这是一个毫无意义的测试用例——您至少应该对您的同事有一定程度的信心。我更担心的是测试实际的业务逻辑,而不是控制流。谢谢。调试节省了我99999小时。