2017-10-04 6 views
0

私のコントローラのユニットテストを書きたいと思います。MVCコントローラアクションの応答StatusCodeをテストする方法

アクションのレスポンスコードを確認したいと思います。たとえば、投稿アクションは201を返し、返信は200などを返します。

ただし、アクションメソッドはIActionResultを返します。 ActionResultからの応答コードを入手するにはどうすればよいですか?

//setup 
MyController controller = CreateController<MyController>(); 

//action 
var actionResult = controller.Post(dafXml); 

//assert 
??? 

私はステータスコードだけを気にしているので、アクションの結果のタイプを確認する必要はありません。例えば、201は... CreatedAtActionCreatedAtRouteまたはカスタムObjectResultとのことで

答えて

1

を達成することができますあなたは、単にタイプHttpResponseMessageのHTTP応答を取得するためにIHttpActionResultオブジェクトの上ExecuteAsyncメソッドを呼び出して、それを確認するためにStatusCodeプロパティにアクセスすることができます。

https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/action-results

+0

あなたの答えはWeb API 2に適しています。ただし、OPはAsp.net-Coreのものですが、これはまだ適用されます。しかし、確実にコアからドキュメントを見つけるべきです。 – Nkosi

0

FluentAssertionsコントローラの応答コードを主張するエレガントな方法を提供 -

またIHttpActionResultの作品がどのように参照することができます。以下の例を参照してください。

// 200 
actionResult.Should().BeOfType<OkObjectResult>() 
    .Which.StatusCode.Should().Be((int)HttpStatusCode.OK); 

// 201 
actionResult.Should().BeOfType<CreatedResult>() 
    .Which.StatusCode.Should().Be((int)HttpStatusCode.Created); 

// 500 
actionResult.Should().BeOfType<ObjectResult>() 
    .Which.StatusCode.Should().Be((int)HttpStatusCode.InternalServerError); 
関連する問題