Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试-控制器操作返回的断言对象_C#_Unit Testing_Asp.net Core_Asp.net Core Webapi - Fatal编程技术网

C# 单元测试-控制器操作返回的断言对象

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

在不更改控制器操作中的任何代码的情况下,如何检查作为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
}
[事实]
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小时。