博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[翻译] ASP.NET MVC Tip #3 – 在单元测试时提供明确的视图名字
阅读量:5773 次
发布时间:2019-06-18

本文共 2162 字,大约阅读时间需要 7 分钟。

原文地址:

摘要:在这个Tip中,Stephen Walther解释了当控制器action需要返回一个特定的视图时,应该如何进行单元测试。他建议你如果打算建立单元测试的话,还是要明确地指出视图的名称。

ASP.NET MVC框架是一个高度可测试的框架。你可以很方便地测试MVC控制器Action,确定它是否能够返回你所期望的结果。在这个Tip中,我会向你展示如何测试一个会返回特定视图的控制器action。

考虑清单1中名为HomeController的MVC控制器。该控制器包含一个名为Index()的action。Index() action返回一个视图。然而,这里并没有提供视图的名字。视图的名字是通过控制器action的名字推断出来的。因此,当你到用Index() action时,会返回名为Index的视图。

HomeController还包含另外一个名为Index2()的action。这个action也返回一个视图。然而,这个action明确地指出了视图的名字。视图的名字被传递到View()方法中。该控制器action和第一个控制器action做的事情是相同的。然而,第一个控制器action的视图名字是推断出来的,而第二个控制器action的视图名字是明确指定的。

清单1 - HomeController.cs

 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 
16        public ActionResult Index2()
17        {
18            return View("Index"); // view name explicit
19        }
20 
21    
22    }
23}

如果你计划为ASP.NET MVC应用程序创建单元测试,则你必需明确指定视图的名字。否则,即便返回了正确的视图,也无法通过单元测试。

清单2的测试类中包含了两个测试方法。第一个方法测试了HomeController的Index() action,第二个方法测试了Index2()。第一个测试总是失败,而第二个测试则能成功(参见图1)。

清单2 - HomeControllerTest.cs

 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 
31 
32        [TestMethod]
33        public void Index2()
34        {
35            // Arrange
36            HomeController controller = new HomeController();
37 
38            // Act
39            ViewResult result = controller.Index2() as ViewResult;
40 
41            // Assert
42            Assert.AreEqual("Index", result.ViewName);
43        }
44 
45 
46    }
47}

图1 - 单元测试结果

单元测试无法推断视图名字。我的建议是,如果打算进行单元测试,应该总是明确指定视图的名字。

此处下载源代码:
------
广告:欢迎光临[.NET正则表达式库] 。

你可能感兴趣的文章
source insight中的快捷键总结
查看>>
PC-IIS因为端口问题报错的解决方法
查看>>
JavaScript学习笔记(12)——JavaScript自定义对象
查看>>
SQL中的Null深入研究分析
查看>>
多人交互与体感游戏开发相关技术说明
查看>>
Linux下的Memcache安装
查看>>
调用约定
查看>>
【转】ROS之topic和service通信比较
查看>>
[转]Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL...
查看>>
lesson7:java线程池
查看>>
【2019年OCP新题】OCP题库更新出现大量新题-11
查看>>
N-Queens
查看>>
mysql允许远程连接
查看>>
day8 socket编程CS模型完善错误处理
查看>>
线程基础8-quene讲解
查看>>
bootstrap开始咯
查看>>
linux清理n天前的文件命令
查看>>
python windows下获取路径时有中文处理
查看>>
【转】AMD 的 CommonJS wrapping
查看>>
ArcGIS制图之Sub Points点抽稀
查看>>