Xunitを使用した単体テストプロジェクトがあり、テストするメソッドはIActionResult
を返します。
「NegotiatedContentResult」を使用してIActionResult
のコンテンツを取得することを提案する人もいますが、それはXunitでは機能しません。
だから私はXunitでIActionResult
のコンテンツ値を取得する方法を疑問に思う?
テストコードの例を以下に示します。
public void GetTest()
{
var getTest = new ResourcesController(mockDb);
var result = getTest.Get("1");
//Here I want to convert the result to my model called Resource and
//compare the attribute Description like below.
Resource r = ?? //to get the content value of the IActionResult
Assert.Equal("test", r.Description);
}
XUnitでこれを行う方法を知っている人はいますか?
返されるものに依存します。前の例では、このようなアクションを使用しました。
_[HttpGet("{id}")]
public IActionResult Get(string id) {
var r = unitOfWork.Resources.Get(id);
unitOfWork.Complete();
Models.Resource result = ConvertResourceFromCoreToApi(r);
if (result == null) {
return NotFound();
} else {
return Ok(result);
}
}
_
そのメソッドは、OkObjectResult
またはNotFoundResult
を返します。テスト対象のメソッドがOk()
を返すことを期待している場合は、テストの結果を期待するものにキャストし、そのアサーションを行う必要があります
_public void GetTest_Given_Id_Should_Return_OkObjectResult_With_Resource() {
//Arrange
var expected = "test";
var controller = new ResourcesController(mockDb);
//Act
var actionResult = controller.Get("1");
//Assert
var okObjectResult = actionResult as OkObjectResult;
Assert.NotNull(okObjectResult);
var model = okObjectResult.Value as Models.Resource;
Assert.NotNull(model);
var actual = model.Description;
Assert.Equal(expected, actual);
}
_