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     /// <summary>
13     /// Summary description for HomeControllerTest
14     /// </summary>
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的名字。

 

下载源代码

posted on 2008-08-19 20:40  Xuemin_Zhang  阅读(315)  评论(0编辑  收藏  举报