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服务器上下文中。你有什么建议吗