C# 单元测试中的HttpResponse处理
我有一个简单的网站,有一个页面。我正在进行单元测试的功能是C# 单元测试中的HttpResponse处理,c#,asp.net,unit-testing,webforms,httpresponse,C#,Asp.net,Unit Testing,Webforms,Httpresponse,我有一个简单的网站,有一个页面。我正在进行单元测试的功能是 public void WriteFileToClient(string fileContent, string fileName) { StringWriter stringWriter = new StringWriter(); stringWriter.Write(fileContent); Response.ContentType = "te
public void WriteFileToClient(string fileContent, string fileName)
{
StringWriter stringWriter = new StringWriter();
stringWriter.Write(fileContent);
Response.ContentType = "text/plain";
Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.txt", fileName));
Response.Clear();
using (StreamWriter writer = new StreamWriter(Response.OutputStream, Encoding.UTF8))
{
writer.Write(stringWriter.ToString());
}
Response.End();
}
当我运行我的测试时,它说响应
不可用
这是我的单元测试
[TestMethod]
[TestCategory("Unit")]
public void WriteFileToClient_ShouldSucceedForCorrectInput()
{
//Arrange
Migrate migrate = new Migrate();
Guid g = Guid.Parse("fffe49c1-a838-46bc-b5c6-4e0bbd3e4c32");
string fileContent = migrate.GenerateFlatFileText(g);
string fileName = string.Format("flat file - {0}.txt", g);
//Ask
migrate.WriteFileToClient(fileContent, fileName);
//Assert
migrate.Response.OutputStream.Should().NotBeNull();
migrate.Response.ContentType.Should().Be("text/plain");
migrate.Response.Headers.Should().HaveCount(1);
}
有没有关于如何模仿回应的建议?老实说,我不明白为什么
Response
对象不可用,我的Migrate
类继承Page
,据我所知,应该包含Response
响应响应对象是System.Web的一部分,这是它在Web服务器中运行的一个强有力的指示器。您在web代码上运行“单元测试”,而不调用web服务器。你能猜出它为什么会失败吗
UI通常不是可以轻松进行单元测试的东西(如果有的话)。MVC中的控制器是一个例外,但控制器必须与依赖项隔离,以便在“它调用了正确的视图”之后进行单元测试。当您开始处理响应流之类的测试时,需要在web服务器的上下文中显示代码。这意味着必须使用HTTP请求测试带有响应的实际代码,然后检查响应。这与其说是单元测试,不如说是集成测试,除非您模拟了依赖关系
有意义吗?响应对象是System.Web的一部分,这是它在Web服务器中运行的一个强有力的指示器。您在web代码上运行“单元测试”,而不调用web服务器。你能猜出它为什么会失败吗 UI通常不是可以轻松进行单元测试的东西(如果有的话)。MVC中的控制器是一个例外,但控制器必须与依赖项隔离,以便在“它调用了正确的视图”之后进行单元测试。当您开始处理响应流之类的测试时,需要在web服务器的上下文中显示代码。这意味着必须使用HTTP请求测试带有响应的实际代码,然后检查响应。这与其说是单元测试,不如说是集成测试,除非您模拟了依赖关系
有意义吗?响应对象是System.Web的一部分,这是它在Web服务器中运行的一个强有力的指示器。您在web代码上运行“单元测试”,而不调用web服务器。你能猜出它为什么会失败吗 UI通常不是可以轻松进行单元测试的东西(如果有的话)。MVC中的控制器是一个例外,但控制器必须与依赖项隔离,以便在“它调用了正确的视图”之后进行单元测试。当您开始处理响应流之类的测试时,需要在web服务器的上下文中显示代码。这意味着必须使用HTTP请求测试带有响应的实际代码,然后检查响应。这与其说是单元测试,不如说是集成测试,除非您模拟了依赖关系
有意义吗?响应对象是System.Web的一部分,这是它在Web服务器中运行的一个强有力的指示器。您在web代码上运行“单元测试”,而不调用web服务器。你能猜出它为什么会失败吗 UI通常不是可以轻松进行单元测试的东西(如果有的话)。MVC中的控制器是一个例外,但控制器必须与依赖项隔离,以便在“它调用了正确的视图”之后进行单元测试。当您开始处理响应流之类的测试时,需要在web服务器的上下文中显示代码。这意味着必须使用HTTP请求测试带有响应的实际代码,然后检查响应。这与其说是单元测试,不如说是集成测试,除非您模拟了依赖关系
有意义吗?谢谢格雷戈里,这是有意义的。在我的单元测试中,我正在调用存在于web服务器上下文中的函数,该函数失败是因为我不再处于web服务器上下文中。您建议模拟依赖关系还是继续使用
HttpRequest
测试我的函数到该页面?在大多数情况下,我使用非常精简的UI位。示例:ASP.NET页面的事件最多只有几行,实际移动的代码在类中。但是,我不会将写入流的代码移到更深的层次,因为它非常关注用户界面。然后,根据测试内容分离测试类型。如果您正在测试web UI,则更可能是集成测试。有道理吗?有道理,我想我需要一些时间来思考一下汉克斯·格雷戈里,这是有道理的。在我的单元测试中,我正在调用存在于web服务器上下文中的函数,该函数失败是因为我不再处于web服务器上下文中。您建议模拟依赖关系还是继续使用HttpRequest
测试我的函数到该页面?在大多数情况下,我使用非常精简的UI位。示例:ASP.NET页面的事件最多只有几行,实际移动的代码在类中。但是,我不会将写入流的代码移到更深的层次,因为它非常关注用户界面。然后,根据测试内容分离测试类型。如果您正在测试web UI,则更可能是集成测试。有道理吗?有道理,我想我需要一些时间来思考一下汉克斯·格雷戈里,这是有道理的。在我的单元测试中,我正在调用存在于web服务器上下文中的函数,该函数失败是因为我不再处于web服务器上下文中。您建议模拟依赖关系还是继续使用HttpRequest
测试我的函数到该页面?在大多数情况下,我使用非常精简的UI位。示例:ASP.NET页面的事件最多只有几行,实际移动的代码在类中。但是,我不会将写入流的代码移到更深的层次,因为它非常关注用户界面。然后,根据测试内容分离测试类型。如果您正在测试web UI,则更可能是集成测试。有道理吗?有道理,我想我需要一些时间来思考一下汉克斯·格雷戈里,这是有道理的。在我的单元测试中,我正在调用存在于web服务器上下文中的函数,该函数失败是因为我不再处于web服务器上下文中。你有什么建议吗