Tip#3-单元测试时请直接给出View的名字

该篇文章是Encosia博客中的文章,个人觉得不错就翻译了一下。但由于个人英语水平有限,还望各位海量。如果想看原文,请点击ASP.NET MVC Tip #3 – Provide Explicit View Names when Unit Testing 查看原文。

    

     这个篇条目中,Stephen Walther向你讲述怎样对控制器操作返回特定的View进行单元测试。他建议当你要创建单元测试时明确View的名称。

     Asp.net MVC框架被设计的非常可测试性。你能非常容易的测试一个MVC控制器操作确定是否这个操作返回了正确的结果。这个条目中,我会给你展示怎样测试一个控制器操作返回了特定的View。

在列表1中,考虑名为HomeControlller的MVC控制器。这个控制器中包含一个名为Index()的操作。这个Index()操作返回一个View。但是这个View的名字没有被提供。这个View的名字是从控制器动作的名称中推导出的。因此当我们调用Index()操作时,一个名为Index的View被返回。

    HomeControlller包含第二个名为Index2()的操作。这个操作也同样返回一个View。但是在第二个操作中,View的名字被明确的定义。这个View的名字传递给View()方法。第二个控制器操作实现第一个控制器同样的功能。但是,就名字而言第一个view的名字是被推导出的而第二个view的名字是直接给出的。

 1  using  System;
 2  using  System.Collections.Generic;
 3  using  System.Linq;
 4  using  System.Web;
 5  using  System.Web.Mvc;
 6 
 7  namespace  Tip3.Controllers
 8  {
 9       public   class  HomeController : Controller
10      {
11           public  ActionResult Index()
12          {
13               return  View();  //  view name inferred
14          }
15           public  ActionResult Index2()
16          {
17               return  View( " Index " );  //  view name explicit
18          }    
19      }
20  }

     如果你要为你的Asp.net MVC程序创建单元测试,你应当直接的给出你的View的名称。否则,你不会从你的单元测试中返回正确的结果。

     列表2中的测试类有两个测试方法。第一个测试方法测试HomeControlller的Index()操作,第二个方法测试HomeControlller的Index2()操作。第一个测试失败第二个测试成功。

 1  using  System;
 2  using  System.Collections.Generic;
 3  using  System.Linq;
 4  using  System.Text;
 5  using  System.Web.Mvc;
 6  using  Microsoft.VisualStudio.TestTools.UnitTesting;
 7  using  Tip3;
 8  using  Tip3.Controllers;
 9 
10  namespace  Tip3Tests.Controllers
11  {
12       ///  
13       ///  Summary description for HomeControllerTest
14       ///  

15      [TestClass]
16       public   class  HomeControllerTest
17      {
18          [TestMethod]
19           public   void  Index()
20          {
21               //  Arrange
22              HomeController controller  =   new  HomeController();
23 
24               //  Act
25              ViewResult result  =  controller.Index()  as  ViewResult;
26 
27               //  Assert
28              Assert.AreEqual( " Index " , result.ViewName);
29          }
30          [TestMethod]
31           public   void  Index2()
32          {
33               //  Arrange
34              HomeController controller  =   new  HomeController();
35 
36               //  Act
37              ViewResult result  =  controller.Index2()  as  ViewResult;
38 
39               //  Assert
40              Assert.AreEqual( " Index " , result.ViewName);
41          }
42      }
43  }

     单元测试不能推断一个View的名称。我的建议是如果你计划要测试你的程序你应当直接的给我view的名字。

 

下载源代码

转载于:https://www.cnblogs.com/Nimeux/archive/2008/08/19/1271676.html

你可能感兴趣的:(Tip#3-单元测试时请直接给出View的名字)