【问题标题】:Fluent assertions in c# How to assert anonymous Typec#中流利的断言如何断言匿名类型
【发布时间】:2022-07-23 15:41:29
【问题描述】:

我们正在为我们的 .Net core 3.1 Web API 尝试使用 Fluent Assertions 并使用 XUnit 进行测试驱动开发。

这是我的控制器返回的内容。

{
    "usersResult": [
       {
       "UserId": "1",
       "UserName": "Foo"
        },
        {
        "UserId": "2",
        "UserName": "Boo"
        }
    ]

}

在我的测试方法中,我想检查它是否返回一个对象,即我想在 userResult 类型上断言,当我为“userResult”调试它的显示匿名类型时 ,所以我很困惑我应该在什么类型中指定:Should().BeOfType(??)

[HttpGet]

        public async Task<IActionResult> GetUsers()
        {
    
        Users us = new Users();
        var us = await _service.GetUsers();
                          
        return Ok(new { usersResult = us });
        
        }


public class Users 
{
 public string UserId{ get; set; }
 public string UserName{ get; set; }
}

// 测试方法:

  [Fact]
  public async Task GetUsers_OnSuccess_ReturnsListOfUsers()
        {
            var sut = new UserController();
            var result = await sut.GetUsers();

            result.Should().BeOfType<OkObjectResult>();
            var objectResult = (OkObjectResult)result;
           
            objectResult.Value.Should().BeOfType<**WHAT_To_Specify**>();
        }

【问题讨论】:

  • 简短的回答是:你不能。
  • 看起来与github issue 上的 cmets 相似

标签: c# asp.net-core tdd xunit fluent-assertions


【解决方案1】:

您不应该直接测试您的控制器类。您应该创建一个内存测试服务器,然后调用真正的 HTTP 请求,例如 this。

【讨论】:

    【解决方案2】:

    在 TDD 中,最好在项目中应用关注点分离和 DIP(依赖倒置原则), 负责接收请求并将其发送到服务的控制器,因此它内部没有任何逻辑。

    在大多数情况下,我们使用单元测试来确保逻辑正常运行。

    不建议在有两层或多层抽象的地方使用,

    您需要将 SUT(被测系统)与所需的抽象(如存储库)隔离开来。

    例如:当您在项目中使用存储库模式并在服务中调用存储库方法时,最好使用 Mock 、 Fake 或 Stub 来创建存储库接口的假实例 并从中返回您最喜欢的行为。这就是我们所说的单元测试。

    您尝试进行的测试称为集成测试。 并且不建议在 Controller 和 Service 之间使用它。

    我们通常使用它来确保数据库和项目之间的交互完全正常。

    我建议忽略这部分,不要这样测试。 但如果你想测试它:

    最好将行为测试(API 测试)与 specflow 一起使用,即从 API 到数据库的测试孔操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 2014-07-27
      • 2021-01-08
      • 2021-12-04
      • 2018-06-25
      • 2021-11-21
      • 2013-09-24
      相关资源
      最近更新 更多