![](/img/trans.png)
[英]How do you unit test RazorViewEngineOptions in ASP.NET Core MVC?
[英]How do you test for NotFound() in ASP.Net Core MVC
嗨,我正在嘗試為我的 controller 編寫單元測試,這是我編寫的第一個測試,嗯,正在嘗試編寫。
在我的 controller 我有方法 -
public IActionResult Details(int id)
{
var centre = _centreRepository.GetCentreById(id);
if (centre == null)
{
return NotFound();
}
return View(Centre);
}
我正在嘗試編寫一個測試,以便在返回 NotFound() 時通過。
對於我的測試,我有 -
[Test]
public void TestVaccinationCentreDetailsView()
{
var centrerepository = new Mock<ICentreRepository>();
var controller = new CentreController(centrerepository.Object);
var result = controller.Details(99);
Assert.AreEqual(404, result.StatusCode);
}
運行結果返回Microsoft.AspNetCore.Mvc.NotFoundResult object,狀態碼為404,result.StatusCode不存在。
我很困惑。
我正在使用.Net 5,ASP.Net 核心 MVC 5。
有人可以幫忙嗎?
謝謝你。
controller 操作正在返回一個抽象。 即IActionResult
將測試中的結果轉換為預期的類型並對其進行斷言
[Test]
public void TestVaccinationCentreDetailsView() {
//Arrange
var centrerepository = new Mock<ICentreRepository>();
var controller = new CentreController(centrerepository.Object);
//Act
var result = controller.Details(99) as NotFoundResult; //<-- CAST HERE
//Assert
Assert.IsNotNull(result);
Assert.AreEqual(404, result.StatusCode);
}
只測試result
是否為NotFoundResult
類型就足夠了
var result = controller.Details(99);
//I prefer this one
Assert.IsInstanceOf<NotFoundResult>(result);
//other possible solution
Assert.IsTrue(result is NotFoundResult);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.