c# - 单元测试 - 断言 Controller 操作返回的对象

标签 c# unit-testing asp.net-core asp.net-core-webapi

如何在不更改 Controller 操作中的任何代码的情况下检查作为 OkObjectResult 的一部分返回的值的计数是否为 2?

这是我的 Controller Action

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。

最佳答案

你应该能够做这样的事情:

var objectResult = Assert.IsType<OkObjectResult>(result);
var model = Assert.IsAssignableFrom<List<string>>(objectResult.Value);
Assert.Equal(2, model.Count);

关于c# - 单元测试 - 断言 Controller 操作返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45891336/

相关文章:

c# - 打开 XML 更改表格的字体大小

c# - 关于集合返回类型的问题

python - 仅当另一个单元测试通过时才运行 python 单元测试

asp.net - 使用 ASP.NET Core 和 EntityFramework 7 通过 Azure 中的迁移更改来更新生产数据库

c# - 需要一个非空的请求体

c# - Entity Framework DbContext : Value cannot be null, 参数名称来源

c# - 如何在安装过程中检测计算机(不仅仅是浏览器)中的 Adob​​e Acrobat Reader 安装?

java - 可变输出 Mockito 模拟

javascript - JavaScript 中的单元测试

css - 如何在 asp.net core 中使用 .less 文件?