11-3URLTestDemo实例操作完成URL单元测试
11-3URLTestDemo
1、File -> New -> Project
在左边模板中选择Visual C#里的Web,对应到的项目类型选择ASP.NET MVC3 Web Application,并给项目取名字为11-3URLTestDemo,默认的解决方案名自动为相应的11-3URLTestDemo。
2、在解决方案管理器中,鼠标右击解决方案名字Solution’ 11-3URLTestDemo’,选择Add -> New Project,如下图。
打开“Add New Project”对话框后,在左边的模板选择Visual C#里的Test,对应的项目类型选择Test Project,并取名字为URLTestDemo.UnitTests,如下图。
创建好项目后,可以将不用的Class1.cs文件和URLTestDemo.UnitTests项目中的UnitTest1.cs文件删除掉。
3、给URLTestDemo.UnitTests项目添加Moq程序包和对项目11-3URLTestDemo的依赖。
在URLTestDemo.UnitTests项目名上右击鼠标,选择Manage NuGet Packages…,在打开的对话框中在线搜索Moq,并安装。再次在URLTestDemo.UnitTests项目名上右击鼠标,选择Add Reference,在打开的对话框中选择对项目11-3URLTestDemo的依赖。
4、本例是为了对URL做单元测试,在11-3URLTestDemo项目中,打开Global.asax.cs文件,将RegisterRoutes函数修改如下:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("MyRoute", "{controller}/{action}"); }
然后再在RegisterRoutes函数上点鼠标右键,选择Create Unit Tests,创建单元测试的文件,这里就会在项目URLTestDemo.UnitTests中产生一个名字为MvcApplicationTest.cs的文件,打开该文件,将MvcApplicationTest类中的原有内容删除,修改如下:
namespace URLTestDemo.UnitTests
{
[TestClass()]
public class MvcApplicationTest
{
private HttpContextBase CreateHttpContext(string targetUrl=null,
string httpMethod = "GET")
{
Mock<HttpRequestBase> mockRequest = new Mock<HttpRequestBase>();
mockRequest.Setup(m => m.AppRelativeCurrentExecutionFilePath).Returns(targetUrl);
mockRequest.Setup(m => m.HttpMethod).Returns(httpMethod); Mock<HttpResponseBase> mockResponse = new Mock<HttpResponseBase>();
mockResponse.Setup(m => m.ApplyAppPathModifier(
It.IsAny<string>())).Returns<string>(s => s); Mock<HttpContextBase> mockContext = new Mock<HttpContextBase>();
mockContext.Setup(m => m.Request).Returns(mockRequest.Object);
mockContext.Setup(m => m.Response).Returns(mockResponse.Object); return mockContext.Object;
} private void TestRouteMatch(string url, string controller,
string action, object routeProperties = null,
string httpMethod = "GET")
{
//布置
RouteCollection routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes); //动作
RouteData result = routes.GetRouteData(CreateHttpContext(url, httpMethod)); //断言
Assert.IsNotNull(result);
Assert.IsTrue(TestIncomingRouteResult(result, controller, action, routeProperties));
} private bool TestIncomingRouteResult(RouteData routeResult,
string controller, string action, object propertySet = null)
{
Func<object, object, bool> valCompare = (v1, v2) =>
{
return StringComparer.InvariantCultureIgnoreCase.Compare(v1, v2) == ;
};
bool result = valCompare(routeResult.Values["controller"], controller)
&& valCompare(routeResult.Values["action"], action); if (propertySet != null)
{
PropertyInfo[] propInfo = propertySet.GetType().GetProperties();
foreach (PropertyInfo pi in propInfo)
{
if (!(routeResult.Values.ContainsKey(pi.Name) &&
valCompare(routeResult.Values[pi.Name], pi.GetValue(propertySet, null))))
{
result = false;
break;
}
}
}
return result;
} private void TestRouteFail(string url)
{
//布置
RouteCollection routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes); //动作
RouteData result = routes.GetRouteData(CreateHttpContext(url)); //断言
Assert.IsTrue(result == null || result.Route == null);
} [TestMethod]
public void TestIncomingRoutes()
{
TestRouteMatch("~/Admin/Index", "Admin", "Index");
TestRouteMatch("~/One/Two", "One", "Two"); TestRouteFail("~/Admin/Index/Segment");
TestRouteFail("~/Admin");
}
}
}
5、接下来,在菜单上选择Test -> Run -> All Tests in Solution,执行单元测试。
-lyj
11-3URLTestDemo实例操作完成URL单元测试的更多相关文章
- Java 正则表达式实例操作
Regular Expression正则表达式,简称RegExp,常规通用的表达式,在多个开发语言中都有它的实现,可以通过正则表达式来快速的检索.匹配.查找.替换字符串中的文本. 简单实例 匹配网址 ...
- Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用
ylbtech-Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用 1.返回顶部 1. Java 实例 - enum 和 switch 语句 ...
- Arthas之实例操作
Arthas之实例操作 1. 静态类属性操作 获取public静态属性 ognl -c 7cd84586 '@com.system.framework.ArtahsDemoClassLoader@pu ...
- JavaScript学习11 数组排序实例
JavaScript学习11 数组排序实例 数组声明 关于数组对象的声明,以前说过:http://www.cnblogs.com/mengdd/p/3680649.html 数组声明的一种方式: va ...
- [转]使用Xcode 4发布App 实例操作
使用xcode 4发布app 实例操作是本文介绍的内容,不多说,我们直接进入话题. 1.iOS Provisioning Portal 和iTunes Connect 没有变,下载与安装.mobile ...
- Flashback Drop实例操作
1.Flashback DropFlashback Drop 是从Oracle 10g 开始出现的,用于恢复用户误删除的对象(包括表,索引等), 这个技术依赖于Tablespace Recycle B ...
- ANTLR和StringTemplate实例:自动生成单元测试类
ANTLR和StringTemplate实例:自动生成单元测试类 1. ANTLR语法 要想自动生成单元测试,首先第一步就是分析被测试类.这里以Java代码为例,用ANTLR对Java代码进行分析.要 ...
- Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素
ylbtech-Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素 1.返回顶部 1. Java 实例 - 删除数组元素 Java 实例 以下实例演示了如何使用 ...
- 058——VUE中vue-router之实例操作新闻列表单页面应用与路由别名的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- 第七课 GC资源管理器实验
<GC资源管理器> 要求: 1.定义2个资源消耗组(OLTP事务处理资源消耗组和DSS数据仓库资源消耗组) 2.创建一个日程计划schedule 3.对于OLTP资源消耗组,我们最多不 ...
- oracle日期函数集锦
oracle 中select TO_CHAR(sysdate,'Mon') from dual; Question:出来是中文的“6月” 我想要英文的怎么办? Answer:select to_cha ...
- Linux(CentOS6.4、CentOS6.3)下安装、配置PostgreSQL9.2
首先,卸载机器上默认安装的PostgreSQL-8.3.x . [root@localhost ~]# rpm -qa | grep postgresql postgresql-jdbc--.el6. ...
- 获取UIButton的一些属性
获取文字 button.currentTitle 更多如下: @property(nullable, nonatomic,readonly,strong) NSString *currentTitl ...
- C# Log4Net使用指南(转)
1 简介 1.1 Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管 ...
- 使用bootstrap做一个响应式的页面
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- You have not agreed to the Xcode license.
You have not agreed to the Xcode license. Before running the installer again please agree to the lic ...
- poj2196---Specialized Four-Digit Numbers
#include <stdio.h> #include <stdlib.h> int main() { int i,sum,sumOfH,sumOfd,tmp1,tmp2,tm ...
- [LeetCode][Python]17: Letter Combinations of a Phone Number
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 17: Letter Combinations of a Phone Numb ...
- js模块化认识1
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...