簡體   English   中英

如何在 ASP.Net Core MVC 中測試 NotFound()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM