【发布时间】:2010-05-07 19:05:41
【问题描述】:
我当前基于 Asp .net 的项目大量使用 Http 处理程序来处理各种请求?那么,有什么方法可以让我使用单元测试用例测试每个处理程序的功能?我们正在使用 Nunit 和 Moq 框架来促进单元测试。
【问题讨论】:
标签: asp.net unit-testing httphandler
我当前基于 Asp .net 的项目大量使用 Http 处理程序来处理各种请求?那么,有什么方法可以让我使用单元测试用例测试每个处理程序的功能?我们正在使用 Nunit 和 Moq 框架来促进单元测试。
【问题讨论】:
标签: asp.net unit-testing httphandler
我认为不久前的这些博客条目是相关的:
http://www.kongsli.net/nblog/2009/05/03/aspnet-35-improving-testability-with-systemwebabstractions/
有关如何对 HttpHandler 进行单元测试的示例,请参见第一篇文章中的示例 #2。
【讨论】:
如果您不关心单元测试并且想要快速而肮脏的东西,您可以使用Fiddler
如果您想要更集成的方法(单元测试),您可以使用 WebRequest 和 WebResponse。
【讨论】:
你当然可以,虽然我没有“愤怒”地做自己。
使用 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);
}
【讨论】:
这是一篇文章,它清楚地解释了有关 http 处理程序的单元测试。
http://jgvimalan.wordpress.com/2011/08/30/unit-test-for-http-handler/
【讨论】:
您可以使用其他答案中提到的方法对处理程序进行集成测试,要进行单元测试,您需要创建一些接口并从处理程序中提取核心功能,以及创建一些模拟对象。
您将无法对它的所有部分进行单元测试,因为它依赖于外部资源(您将要模拟的资源)——但这很好,这就是我们进行集成测试的原因。
【讨论】:
如果您想测试处理程序和 Web UI 之间的通信,那么是的,集成测试就是解决这个问题的方法。为了对您的逻辑进行单元测试,您能否将您的业务逻辑分成其他类(我会为业务层使用单独的程序集)并在您的表示层之外模拟/单元测试这些类?
一旦您拥有一个与表示层分离的结构化(和单元测试)业务层,您的处理程序就可以简单地实例化您的具体实例并调用提供的方法。完成此操作后,您就可以进行集成测试,因为您的业务逻辑已经过单元测试。
【讨论】: