ASP.Net MVC测试项目中的Response.BinaryWrite()

时间:2014-12-04 07:31:41

标签: asp.net-mvc asp.net-mvc-5 tdd moq

我陷入困境,我正在ASP.Net MVC中创建一个测试项目,这里我正在测试一个实际上用来下载文件的方法,所以每当我试图测试这个方法时,它给出了

  

使用自定义TextWriter时,OutputStream不可用

Response.BinaryWrite()出错,一切都很好,除了这个,有人能告诉我如何解决这个异常,我使用 MOQ dll进行模拟,请建议我摆脱这个情况。

HttpContext.Current.Response.BinaryWrite()

这是实际生成异常的行,现在我有一个问题 - 测试下载方法是否合适,或者我必须离开它,如果它好,那么如何解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:1)

如果您正在编写单元测试,通常不希望编写具有您无法控制的依赖项的测试(例如,写入数据库,文件系统或输出流)。您还可以假设Response.BinaryWrite执行它应该执行的操作。

你可以做这样的事情来解决你所看到的错误。

public interface IBinaryWriter 
{
  void BinaryWrite(byte[] buffer);
}

public class ResponseBinaryWriteWrapper : IBinaryWriter
{ 
  public void BinaryWrite(byte[] buffer)
  {
     HttpContext.Current.Response.BinaryWrite(buffer);    
  }
}

这将使您能够将IBinaryWriter注入要作为模拟测试的类,然后您可以检查是否使用正确的字节数组调用BinaryWrite。在生产代码中,然后注入具体的ResponseBinaryWriterWrapper类。