2017-08-26 22 views
0

如何检查作为该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 
} 

我在我的单元测试中使用模拟和FluentAssertions。

+0

没有意义的试验。所有这一切都是检查你的一个控制器的方法是否返回一个好结果。与有效请求无关。还有一些完全白痴出现并编辑你的代码,所以它返回一个非成功的状态代码,这是一个毫无意义的测试案例 - 你应该至少对同事有一定程度的信心。我更担心的是测试实际的业务逻辑而不是控制流程。 – Mardoxx

回答

0

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

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