ASP.NET Core WebAPIを構築中ですが、コントローラの単体テストを作成しようとしています。私が見つけたほとんどの例は、古いWebAPI/WebAPI2プラットフォームのものであり、新しいCoreコントローラとは関連していないようです。IActionResultを返すWebAPIコントローラメソッドのユニット
私のコントローラメソッドはIActionResults
を返しています。しかし、IActionResult
オブジェクトはコントローラコンテキストを必要とするExecuteResultAsync()
メソッドしか持っていません。私はコントローラを手動でインスタンス化していますので、このインスタンスのコントローラコンテキストはnullで、ExecuteResultAsync
を呼び出すと例外が発生します。本質的に、これは、これらの単体テストを成功裏に完了させる非常にハッキーな道を私に導き、非常に面倒です。私は、APIコントローラをテストするより簡単で正しい方法が必要であると思っています。
また、私のコントローラは違いがある場合、async/awaitを使用していません。私が達成しようとしているものの
簡単な例:
コントローラ方法:
[HttpGet(Name = "GetOrdersRoute")]
public IActionResult GetOrders([FromQuery]int page = 0)
{
try
{
var query = _repository.GetAll().ToList();
int totalCount = query.Count;
int totalPages = (int)Math.Ceiling((double)totalCount/pageSize) - 1;
var orders = query.Skip(pageSize * page).Take(pageSize);
return Ok(new
{
TotalCount = totalCount,
TotalPages = totalPages,
Orders = orders
});
}
catch (Exception ex)
{
return BadRequest(ex);
}
}
ユニットテスト:
[Fact]
public void GetOrders_WithOrdersInRepo_ReturnsOk()
{
// arrange
var controller = new OrdersController(new MockRepository());
// act
IActionResult result = controller.GetOrders();
// assert
Assert.Equal(HttpStatusCode.OK, ????);
}
であなたのアサートを実行しているかの型に結果をキャスト 'GetOrders'方法を表示します。あなたはその方法で何を返していますか?その結果をあなたがそのメソッドで返すものの型にキャストし、それについてあなたの主張を実行します。 – Nkosi