繁体   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