2017-08-26 60 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);