IHttpActionResult を返す Web API アクション メソッドを単体テストするにはどうすればよいですか? 質問する

IHttpActionResult を返す Web API アクション メソッドを単体テストするにはどうすればよいですか? 質問する

これが私の行動方法だと仮定しましょう

public IHttpActionResult Get(int id)
{
    var status = GetSomething(id);
    if (status)
    {
        return Ok();
    }
    else
    {
        return NotFound();
    }
}

テストは

var httpActionResult = controller.Get(1);

この後、http ステータス コードを確認するにはどうすればよいでしょうか?

ベストアンサー1

以下は、応答ステータスを ... に設定するOk()タイプのヘルパーです。アクション結果のインスタンスが... であるかどうかを確認するだけです。いくつかの例 ( で記述) を示します。OkResultHttpStatusCode.OkOkResultXUnit

// if your action returns: NotFound()
IHttpActionResult actionResult = valuesController.Get(10);
Assert.IsType<NotFoundResult>(actionResult);

// if your action returns: Ok()
actionResult = valuesController.Get(11);
Assert.IsType<OkResult>(actionResult);

// if your action was returning data in the body like: Ok<string>("data: 12")
actionResult = valuesController.Get(12);
OkNegotiatedContentResult<string> conNegResult = Assert.IsType<OkNegotiatedContentResult<string>>(actionResult);
Assert.Equal("data: 12", conNegResult.Content);

// if your action was returning data in the body like: Content<string>(HttpStatusCode.Accepted, "some updated data");
actionResult = valuesController.Get(13);
NegotiatedContentResult<string> negResult = Assert.IsType<NegotiatedContentResult<string>>(actionResult);
Assert.Equal(HttpStatusCode.Accepted, negResult.StatusCode);
Assert.Equal("some updated data", negResult.Content);

おすすめ記事