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单元测试的更多相关文章

  1. Java 正则表达式实例操作

    Regular Expression正则表达式,简称RegExp,常规通用的表达式,在多个开发语言中都有它的实现,可以通过正则表达式来快速的检索.匹配.查找.替换字符串中的文本. 简单实例 匹配网址 ...

  2. Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用

    ylbtech-Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用 1.返回顶部 1. Java 实例 - enum 和 switch 语句 ...

  3. Arthas之实例操作

    Arthas之实例操作 1. 静态类属性操作 获取public静态属性 ognl -c 7cd84586 '@com.system.framework.ArtahsDemoClassLoader@pu ...

  4. JavaScript学习11 数组排序实例

    JavaScript学习11 数组排序实例 数组声明 关于数组对象的声明,以前说过:http://www.cnblogs.com/mengdd/p/3680649.html 数组声明的一种方式: va ...

  5. [转]使用Xcode 4发布App 实例操作

    使用xcode 4发布app 实例操作是本文介绍的内容,不多说,我们直接进入话题. 1.iOS Provisioning Portal 和iTunes Connect 没有变,下载与安装.mobile ...

  6. Flashback Drop实例操作

    1.Flashback DropFlashback Drop 是从Oracle 10g 开始出现的,用于恢复用户误删除的对象(包括表,索引等), 这个技术依赖于Tablespace Recycle B ...

  7. ANTLR和StringTemplate实例:自动生成单元测试类

    ANTLR和StringTemplate实例:自动生成单元测试类 1. ANTLR语法 要想自动生成单元测试,首先第一步就是分析被测试类.这里以Java代码为例,用ANTLR对Java代码进行分析.要 ...

  8. Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素

    ylbtech-Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素 1.返回顶部 1. Java 实例 - 删除数组元素  Java 实例 以下实例演示了如何使用 ...

  9. 058——VUE中vue-router之实例操作新闻列表单页面应用与路由别名的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 第七课 GC资源管理器实验

    <GC资源管理器> 要求: 1.定义2个资源消耗组(OLTP事务处理资源消耗组和DSS数据仓库资源消耗组) 2.创建一个日程计划schedule   3.对于OLTP资源消耗组,我们最多不 ...

  2. oracle日期函数集锦

    oracle 中select TO_CHAR(sysdate,'Mon') from dual; Question:出来是中文的“6月” 我想要英文的怎么办? Answer:select to_cha ...

  3. Linux(CentOS6.4、CentOS6.3)下安装、配置PostgreSQL9.2

    首先,卸载机器上默认安装的PostgreSQL-8.3.x . [root@localhost ~]# rpm -qa | grep postgresql postgresql-jdbc--.el6. ...

  4. 获取UIButton的一些属性

    获取文字  button.currentTitle 更多如下: @property(nullable, nonatomic,readonly,strong) NSString *currentTitl ...

  5. C# Log4Net使用指南(转)

    1           简介 1.1          Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管 ...

  6. 使用bootstrap做一个响应式的页面

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 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 ...

  8. poj2196---Specialized Four-Digit Numbers

    #include <stdio.h> #include <stdlib.h> int main() { int i,sum,sumOfH,sumOfd,tmp1,tmp2,tm ...

  9. [LeetCode][Python]17: Letter Combinations of a Phone Number

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 17: Letter Combinations of a Phone Numb ...

  10. js模块化认识1

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...