2010-05-07 162 views
15

我目前的项目基于Asp .net大量使用Http处理程序来处理各种请求?那么,有什么方法可以用单元测试用例来测试每个处理程序的功能?我们使用Nunit和Moq框架来促进单元测试。单元测试http处理程序?

回答

1

你当然可以,虽然我没有在“愤怒”中做过自己。
使用System.Net.WebClient对您的处理程序进行HTTP调用,并评估返回的内容,这将允许您测试处理程序的面向公共的界面。

在这个例子中,我对我的目标进行了硬编码,并且我在WebClient上使用了一个返回字符串的方法。

WebClient还为您提供了对ResponseHeaders,Encoding和其他有用'webby'内容的访问;你也可以上传信息。

using System.Net; 

namespace UnitTestHttpHandler 
{ 
    public class TestHarness 
    { 
     public static string GetString() 
     { 
      WebClient myWebClient = new WebClient(); 
      return myWebClient.DownloadString("http://localhost/Morphfolia.Web/ContentList.ashx"); 
     } 
    } 
} 

然后,您可以使用TestHarness调用目标的HttpHandler,并在您的测试验证结果(或使用更好的方法来你的测试,如果你知道一个 - 我不是一个单元测试大师)。

[TestMethod] 
    public void TestMethod1() 
    { 
     string x = UnitTestHttpHandler.TestHarness.GetString(); 

     Assert.IsTrue(x.Length > 5); 
    } 
+1

但是我们需要将请求路由(使用配置文件)到正确的处理程序,服务器也需要运行,对吧?那么如何模拟呢? – 2010-05-18 04:59:09

+0

是的,一个Web服务器将需要运行。就配置而言,我不能说经验,但我会认为它将以类似的方式通过单元测试(?)通过配置指定其他设置。对不起,我不能提供比这更多的东西。 – 2010-05-25 09:08:44

+0

这实际上工作得很好,唯一的问题是你无法通过你的目标处理程序进行调试。 – Brent 2015-01-16 13:58:15

0

你可以使用在其他的答案中提到的方法,做单元测试,你将需要创建一些接口,并提取核心功能出了处理程序,以及处理程序的集成测试创建一些模拟对象。

你将无法单元测试它的所有部分,因为它依赖于外部资源(那些你会嘲笑的) - 但这很好,这就是为什么我们有集成测试。

0

如果您想测试处理程序和Web UI之间的通信,那么是的,集成测试是实现这一目标的方法。为了单元测试你的逻辑,你能不把你的业务逻辑分成其他类(我会为业务层使用一个单独的程序集),并且模拟/单元测试这些类,而不是在表示层之外?

一旦你有一个已经与表示层分离的结构化(和单元测试)业务层,你的处理程序可以简单地实例化你的concretes并调用提供的方法。一旦完成,您就可以进行集成测试,因为您的业务逻辑将经过单元测试。

2

如果你不关心单元测试和想要的东西快速和肮脏的,你可以使用Fiddler

如果你想要一个更加综合的方法(单元测试),您可以使用WebRequest和WebResponse。