我目前基于Asp .net的项目大量使用Http处理程序来处理各种请求?那么,有什么办法可以使用单元测试用例来测试每个处理程序的功能吗?我们正在使用Nunit和Moq框架来促进单元测试。
答案 0 :(得分:3)
我认为这些博客条目前一段时间是相关的:
http://www.kongsli.net/nblog/2009/05/03/aspnet-35-improving-testability-with-systemwebabstractions/
请参阅第一篇文章中的示例#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之间的通信,那么是,集成测试是实现这一目标的方法。为了对您的逻辑进行单元测试,您是否可以将业务逻辑分离到其他类(我为业务层使用单独的程序集)并在表示层之外模拟/单元测试这些类?
一旦你有一个与表示层分离的结构化(和单元测试的)业务层,你的处理程序就可以简单地实例化你的混凝土并调用提供的方法。完成此操作后,您可以进行集成测试,因为您的业务逻辑已经过单元测试。