天冬氨酸。 NET MVC 4.5 - 如何单元测试操作?

时间:2016-01-14 17:16:14

标签: unit-testing asp.net-mvc-4

在Asp.net MVC 4.5中,使用Microsoft.VisualStudio.TestTools.UnitTesting

有没有办法真正对ActionResult进行单元测试?我见过的所有文档只测试视图名称!

Assert.AreEqual("Action Method", result.ViewName);

好吧,我想要一个真正的考验。如何测试控制器动作的响应?

1 个答案:

答案 0 :(得分:0)

根据以下内容给出一些基本内容:

    public ActionResult Display(string productCode)
    {
        var model = new ProductModel(productCode);

        if (model.NotFound)
        {
             return this.RedirectToRoute("NotFound");
        }

        return this.View("Product", model);
    }

而不是像Assert.AreEqual("Action Method", result.ViewName);那样断言的东西(可以是有效的测试。

你有很多选择,包括......

查看模型类型

    [TestMethod]
    public void Display_WhenPassedValidProductCode_CreatesModel()
    {
        using (var controller = this.CreateController())
        {
            // Arrange Mocks on controller, e.g. a Service or Repository

            // Act
            var result = controller.Display(string.Empty) as ViewResult;
            var model = (ProductModel)result.Model;
            Assert.IsInstanceOfType(model, typeof(ProductModel));
        }
    }

查看模型人口流程

    [TestMethod]
    public void Display_WhenPassedValidProductCode_PopulatesModel()
    {
        using (var controller = this.CreateController())
        {
            const string ProductCode = "123465";
            // Arrange Mocks on controller, e.g. a Service or Repository

            // Act
            var result = controller.Display(ProductCode) as ViewResult;
            var model = (ProductModel)result.Model;
            Assert.AreEqual(ProductCode, model.ProductCode);
        }
    }

查看行动结果的类型

    [TestMethod]
    public void Display_WhenNotFound_Redirects()
    {
        using (var controller = this.CreateController())
        {
            const string ProductCode = "789000";
            // Arrange Mocks on controller, e.g. a Service or Repository

            // Act
            var result = controller.Display(ProductCode) as RedirectToRouteResult;
            Assert.IsNotNull(result); // An "as" cast will be null if the type does not match
        }
    }

基本上你可以测试几乎任何东西,在你的代码库上选择一个例子并尝试测试它。如果你陷入困境,可以构建一个体面的问题并在此处发布。