快速业务通道

使用ASP.NET Abstractions增强ASP.NET应用程序的可测试性

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
awUrl);
     if (!String.IsNullOrEmpty(newUrl))
     {
       context.RewritePath(newUrl);
     }
   }
}

由于测试需要,我们提取出一个IUrlRewriteSource接口。ASP.NET本身会通过无参数的构 造函数进行创建,这时就会使用默认的RegexUrlRewriteSource对象。而在测试的时候,就要 创建Mock对象并通过构造函数的重载进行“依赖注入”了。在Init方法中我们直接使用匿名 委托来作为BeginRequest事件的处理函数,而其中就把逻辑直接委托给TryRewritePath方法 了。TryRewritePath方法会判断Source中得知是否需要进行URL重写,并且在需要的时候调用 RewritePath方法。它的测试如下:

[TestMethod]
public void TryRewritePathTest_No_Rewrite()
{
   Mock<IUrlRewriteSource> mockSource = new  Mock<IUrlRewriteSource>();
   mockSource.Setup(s => s.GetRewritePath(It.IsAny<string>()))
     .Returns<string>(null).Verifiable();

   Mock<HttpContextBase> mockContext = new  Mock<HttpContextBase>(MockBehavior.Strict);
   mockContext.Setup(c => c.Request.RawUrl).Returns("Hello");
   mockContext.Setup(c => c.RewritePath(It.IsAny<string>()))
     .Throws(new InvalidOperationException("Should not call the  RewritePath method."));

   UrlRewriteModule module = new UrlRewriteModule(mockSource.Object);
   module.TryRewritePath(mockContext.Object);
   mockSource.Verify();
}

[TestMethod]
public void TryRewritePathTest_Rewrite_Article_Detail_Page()
{
   string rawUrl = "Article/5";
   string targetUrl = "~/Article.aspx?id=5";

   Mock<IUrlRewriteSource> mockSource = new  Mock<IUrlRewriteSource>();
   mockSource.Setup(s => s.GetRewritePath(It.IsAny<string> ())).Throws(
     new InvalidOperationException("Why so many unnecessary method  calls?"));
   mockSource.Setup(s => s.GetRewritePath(rawUrl)).Returns (targetUrl).Verifiable();

   Mock<HttpContextBase> mockContext = new  Mock<HttpContextBase>(MockBehavior.Strict);
   mockContext.Setup(c => c.Request.RawUrl).Returns(rawUrl);
   mockContext.Setup(c => c.RewritePath(targetUrl)).Verifiable ();

   UrlRewriteModule module = new UrlRewriteModule(mockSource.Object);
   module.TryRewritePath(mockContext.Object);

   mockSource.Verify();
   mockContext.Verify();
}

在不需要重写的情况下,IUrlRewriteSource对象的GetRewritePath方法永远返回null, 而此时也不应该调用HttpContext的RewritePath方法。否则,便判断给出合适的RawUrl和重 写目标,并判断RewritePath方法有没有正确调用过便是。其实单元测试就这么简单。

结束

没啥想说的,就这么结束吧。

您有什么想法吗?说说看吧。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号