📜  ASP.NET MVC-单元测试

📅  最后修改于: 2020-11-21 05:23:41             🧑  作者: Mango


在计算机编程中,单元测试是一种软件测试方法,通过该方法可以测试源代码的各个单元以确定它们是否适合使用。换句话说,这是一个软件开发过程,在该过程中,对应用程序的最小可测试部分(称为单元)进行了独立检查,以确保其正常运行。

在过程编程中,一个单元可以是整个模块,但更常见的是单个函数或过程。在面向对象的编程中,一个单元通常是一个完整的接口,例如一个类,但是可以是一个单独的方法。

单元测试通常是自动化的,但也可以手动完成。

单元测试的目标

单元测试的主要目标是采用应用程序中最小的可测试软件,并确定其行为是否与您期望的完全一样。在将每个单元集成到模块中以测试模块之间的接口之前,需要分别测试每个单元。

让我们看一个简单的单元测试示例,在该示例中,我们使用单元测试创建了一个新的ASP.NET MVC应用程序。

步骤1-打开Visual Studio,然后单击文件→新建→项目菜单选项。

将打开一个新的“项目”对话框。

新建项目对话框

步骤2-在左窗格中,选择“模板”>“ Visual C#”>“ Web”。

步骤3-在中间窗格中,选择“ ASP.NET Web应用程序”。

步骤4-在“名称”字段中输入项目名称“ MVCUnitTestingDemo”,然后单击“确定”继续。您将看到以下对话框,要求您设置ASP.NET项目的初始内容。

MVCUnitTestingDemo

步骤5-选择MVC作为模板,不要忘记选中对话框底部的添加单元测试复选框。您也可以更改测试项目的名称,但是在本示例中,由于它是默认名称,因此我们将其保留不变。

由Visual Studio创建项目后,您将在“解决方案资源管理器”窗口中看到许多文件和文件夹。

步骤6-您可以看到解决方案资源管理器中有两个项目。一个是ASP.NET Web项目,另一个是单元测试项目。

网路专案

步骤7-运行此应用程序,您将看到以下输出。

运行Web项目

如上面的屏幕截图所示,导航栏上有“主页”,“关于”和“联系人”按钮。让我们选择“关于”,您将看到以下视图。

关于选择

让我们选择联系人,然后弹出以下屏幕。

联系人选择

现在,我们展开“ MVCUnitTestingDemo”项目,您将在Controllers文件夹下看到HomeController.cs文件。

HomeController.cs文件

HomeController包含三种操作方法,如以下代码所示。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;

namespace MVCUnitTestingDemo.Controllers {
   public class HomeController : Controller{
      public ActionResult Index(){
         return View();
      } 
        
      public ActionResult About(){
         ViewBag.Message = "Your application description page.";
         return View();
      }
        
      public ActionResult Contact(){
         ViewBag.Message = "Your contact page.";
         return View();
      }
   }
}

让我们展开MVCUnitTestingDemo.Tests项目,您将在Controllers文件夹下看到HomeControllerTest.cs文件。

MVCUnitTestingDemo.Test

在此HomeControllerTest类中,您将看到三个方法,如以下代码所示。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Web.Mvc;
using Microsoft.VisualStudio.TestTools.UnitTesting;

using MVCUnitTestingDemo;
using MVCUnitTestingDemo.Controllers;

namespace MVCUnitTestingDemo.Tests.Controllers{
   [TestClass]
   public class HomeControllerTest{
    
      [TestMethod]
      public void Index(){
         // Arrange
         HomeController controller = new HomeController();
         // Act
         ViewResult result = controller.Index() as ViewResult;
         // Assert
         Assert.IsNotNull(result);
      }
        
      [TestMethod]
      public void About(){
         // Arrange
         HomeController controller = new HomeController();
         // Act
         ViewResult result = controller.About() as ViewResult;
         // Assert
         Assert.AreEqual("Your application description page.", result.ViewBag.Message);
      }
        
      [TestMethod]
      public void Contact(){
         // Arrange
         HomeController controller = new HomeController();
         // Act
         ViewResult result = controller.Contact() as ViewResult;
         // Assert
         Assert.IsNotNull(result);
      }
   }
}

这三种方法将测试“索引”,“关于”和“联系”操作方法是否正常工作。要测试这三种操作方法,请转到“测试”菜单。

测试菜单

选择运行→所有测试以测试这些操作方法。

行动方法

现在,您将在左侧看到“测试资源管理器”,您可以在其中看到所有测试均已通过。让我们再添加一种操作方法,该方法将列出所有员工。首先,我们需要在Models文件夹中添加一个employee类。

以下是Employee类的实现。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;

namespace MVCUnitTestingDemo.Models{
   public class Employee{
      public int ID { get; set; }
      public string Name { get; set; }
      public DateTime JoiningDate { get; set; }
      public int Age { get; set; }
   }
}

我们需要添加EmployeeController。右键单击解决方案资源管理器中的controller文件夹,然后选择Add→Controller。

它将显示“添加支架”对话框。

添加脚手架

选择“ MVC 5控制器–空”选项,然后单击“添加”按钮,将出现“添加控制器”对话框。

将名称设置为EmployeeController并单击“添加”按钮。

添加控制器EmployeeController

您将在Controllers文件夹中看到一个新的C#文件“ EmployeeController.cs”,可以在Visual Studio中对其进行编辑。让我们使用以下代码更新EmployeeController。

using MVCUnitTestingDemo.Models;
using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;

namespace MVCUnitTestingDemo.Controllers {
   public class EmployeeController : Controller{
      [NonAction]
        
      public List GetEmployeeList(){
         return new List{
            new Employee{
               ID = 1,
               Name = "Allan",
               JoiningDate = DateTime.Parse(DateTime.Today.ToString()),
               Age = 23
            },
                
            new Employee{
               ID = 2,
               Name = "Carson",
               JoiningDate = DateTime.Parse(DateTime.Today.ToString()),
               Age = 45
            },
                
            new Employee{
               ID = 3,
               Name = "Carson",
               JoiningDate = DateTime.Parse(DateTime.Today.ToString()),
               Age = 37
            },
                
            new Employee{
               ID = 4,
               Name = "Laura",
               JoiningDate = DateTime.Parse(DateTime.Today.ToString()),
               Age = 26
            },
         };
      }
      
      // GET: Employee
      public ActionResult Index(){
         return View();
      }
        
      public ActionResult Employees(){
         var employees = from e in GetEmployeeList()
         orderby e.ID
         select e;
         return View(employees);
      }
   }
}

要添加“雇员视图”操作方法,请右键单击“雇员”操作,然后选择“添加视图…”。

员工行动

您将看到默认的视图名称。从“模板”下拉列表中选择“列表”,从“模型”类下拉列表中选择“雇员”,然后单击“确定”。

现在,我们需要添加链接“雇员”列表,让我们打开“视图/共享”文件夹下的_layout.cshtml文件,并在“联系人”链接下添加“雇员列表”链接。

  • @Html.ActionLink("Employees List", "Employees", "Employee")
  • 以下是_layout.cshtml的完整实现。

    
          
          @ViewBag.Title - My ASP.NET Application
          @Styles.Render("~/Content/css")
          @Scripts.Render("~/bundles/modernizr")
       
        
       
          
            
          
    @RenderBody()

    © @DateTime.Now.Year - My ASP.NET Application

    @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @RenderSection("scripts", required: false)

    要从Employee控制器测试Employees操作方法,我们需要在单元测试项目中添加另一种测试方法。在EmployeeControllerTest类之后,我们将在其中测试Employees操作方法。

    [TestClass]
    public class EmployeeControllerTest{
       [TestMethod]
       public void Employees(){
          // Arrange
          EmployeeController controller = new EmployeeController();
            
          // Act
          ViewResult result = controller.Index() as ViewResult;
            
          // Assert
          Assert.IsNotNull(result);
       }
    }
    

    从“测试”菜单中选择“运行”→“所有测试”以测试这些操作方法。

    员工测试方法

    您可以看到Employees测试方法现在也已通过。运行应用程序时,将看到以下输出。

    单击导航栏中的“员工列表”选项,您将看到员工列表。

    员工名单