我有一个简单的网站,有一页。我单元测试的功能是
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();
}
当我运行测试时,它表示Response
不可用
这是我的单元测试
[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
答案 0 :(得分:3)
Response对象是System.Web的一部分,它是在Web服务器中运行的强大指示器。您正在Web代码上运行“单元测试”而不调用Web服务器。你能猜出它为什么会失败吗?
如果有的话,用户界面通常不会轻易进行单元测试。一个例外是MVC中的控制器,但是控制器必须与依赖关系隔离,以进行单元测试,而不是“它是否调用了正确的视图”。当您开始处理响应流等测试时,您需要在Web服务器的上下文中调出代码。这意味着必须使用HTTP请求测试具有Response的实际代码,然后检查响应。除了模拟依赖项之外,这更像是集成测试,而不是单元测试。
有意义吗?