单元测试http处理程序?

时间:2010-05-07 19:05:42

标签: asp.net unit-testing httphandler

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

6 个答案:

答案 0 :(得分:3)

我认为这些博客条目前一段时间是相关的:

http://www.kongsli.net/nblog/2009/05/03/aspnet-35-improving-testability-with-systemwebabstractions/

http://www.kongsli.net/nblog/2009/05/28/testability-with-systemwebabstractions-and-no-mock-framework/

请参阅第一篇文章中的示例#2,以获取有关如何对HttpHandler进行单元测试的示例。

答案 1 :(得分:2)

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

如果您想要更加集成的方法(单元测试),您可以使用WebRequest和WebResponse。

答案 2 :(得分:1)

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

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

WebClient还允许您访问ResponseHeaders,编码和其他有用的'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);
    }

答案 3 :(得分:0)

这篇文章清楚地解释了http处理程序的单元测试。

http://jgvimalan.wordpress.com/2011/08/30/unit-test-for-http-handler/

答案 4 :(得分:0)

您可以使用其他答案中提到的方法对处理程序进行INTEGRATION测试,要进行UNIT测试,您需要创建一些接口并从处理程序中提取核心功能,以及创建一些模拟对象。 / p>

你将无法对其中的所有部分进行单元测试,因为它依赖于外部资源(那些你将要嘲笑的部分) - 但这没关系,这就是我们进行集成测试的原因。

答案 5 :(得分:0)

如果您想测试处理程序和Web UI之间的通信,那么是,集成测试是实现这一目标的方法。为了对您的逻辑进行单元测试,您是否可以将业务逻辑分离到其他类(我为业务层使用单独的程序集)并在表示层之外模拟/单元测试这些类?

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