簡體   English   中英

C#單元測試MVC控制器操作參數為空值

[英]C# Unit Testing MVC Controller Action Parameter for Null value

是否值得為null值測試MVC控制器動作參數? 目的是確保將有效值傳遞給操作,我想null也是可能的。

這是控制器動作:

    [HttpPost]
    public ActionResult Create(ContactViewModel viewModel)
    {
        if (!ModelState.IsValid)
            return View("Create", viewModel);

        if (viewModel == null)
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "No data received");

        var contact = Mapper.Map<Contact>(viewModel);

        //contact.UserId = User.Identity.GetUserId();
        contact.UserId = _user.Id;

        _unitOfWork.Contacts.Add(contact);

        _unitOfWork.Complete();

        return RedirectToAction("Index");
    }

我的檢查null參數的測試:

    [TestMethod]
    public void CreatePost_NullViewModelPassed_ShouldReturnBadRequest()
    {
        var result = _controller.Create(null) as HttpStatusCodeResult;
        result.StatusCode.Should().Be(400);
    }

上述測試始終會通過,但這是有用的測試嗎? 我一直在嘗試使用Postman來實現post方法,但是我獲得了Create操作的HttpGet版本:

    public ViewResult Create()
    {
        return View("Create", new ContactViewModel());
    }

您正在編寫的測試應該使被測系統充滿信心,但也會在可能的情況下引發錯誤。 如果您在Create方法中進行了null檢查,那么這是確保系統在收到null值時不會只是“死”的非常有效的測試,而是應該相應地響應它似乎正在通過獲取狀態碼來執行的操作總數為400(錯誤請求),因此總體而言,該測試非常有效-尤其是在將來您可能會重構以引入諸如存儲庫/服務模式之類的內容時。

Create方法的測試應涵蓋所有角度,不僅要成功和不成功地進行調用,還應在視圖模型中使用具有各種值的調用,以及幾乎任何可能改變邏輯的組合(例如包裝在條件中的布爾值,以執行不同的任務)在一定的價值上

,如果您想在Postman中點擊Post方法,那么一定要在URL之前將Method更改為POST

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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