2017-08-26 4 views
0

コントローラアクションのコードを変更せずに、そのOkObjectResultの一部として返される値に2のカウントがあるかどうかを確認するにはどうすればよいですか?ユニットテスト - コントローラアクションによって返されるアサートオブジェクト

はここ

public IActionResult GetUserNames() 
{ 
    var users = _repository.GetUsers(); 
    return Ok(users.Select(u => u.Name)); 
} 

私のユニットテストは、私は私のユニットテストでモックとFluentAssertionsを使用しています。この

[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 
} 

のように見える私のコントローラのアクションです。

+0

むしろ無意味なテスト。これは、コントローラのメソッドのどれかがOKの結果を返すかどうかをチェックすることです。有効なリクエストを行うこととは関係ありません。また、いくつかの完全なばかげた馬鹿が出てきて、あなたのコードを編集して、無意味な状態コードを返します。それは、無意味なテストケースです。あなたの同僚に少なくともある程度の信頼感があるはずです。私はコントロールフローよりも実際のビジネスロジックをテストすることを心配しています。 – Mardoxx

答えて

0

あなたはこのような何かを行うことができるはず:

var objectResult = Assert.IsType<OkObjectResult>(result); 
var model = Assert.IsAssignableFrom<List<string>>(objectResult.Value); 
Assert.Equal(2, model.Count); 
関連する問題