Estoy intentando crear pruebas unitarias para algún código heredado. Una de las clases que tengo que probar se llama FileDownloader que tiene sólo el método siguiente:Mocking HTTPResponse en una prueba de unidad
public void Transmit(string fileName, HttpResponse response, DownloadFileType fileType, byte[] content)
{
response.Clear();
response.ClearHeaders();
response.ContentType = "application/xls";
response.AddHeader("content-disposition", "attachment; filename=" + HttpContext.Current.Server.UrlEncode(fileName));
response.BinaryWrite(content);
response.End();
response.Flush();
}
no se me permite refactorizar el código (que habría sido ideal!).
Para probar esto decidí crear una falsa HttpContext basado en el artículo siguiente
con esto que soy capaz de obtener un falso HttpContext durante mi ejecución de la prueba, sin embargo, hay problemas con la falsificación la respuesta de Http.
Así es como mi prueba se parece a:
[SetUp]
public void SetUp()
{
mocks = new MockRepository();
FakeHttpContext.CreateFakeHttpContext();
}
[Test]
public void ShouldTransmitHttpResponseInTheSpecifiedFormat()
{
FileDownloader downloader = new FileDownloader();
string path = "..\\..\\Fakes\\DummyDownloadReportsTemplate.xls";
byte[] bytes = ReadByteArrayFromFile(path);
downloader.Transmit("test.xls", new HttpResponse(new StringWriter()), DownloadFileType.Excel, bytes);
}
estoy pasando un objeto personalizado creado HTTPResponse al método. Esto arroja la siguiente excepción cuando toca la línea "response.BinaryWrite (content)":
System.Web.HttpException: OutputStream no está disponible cuando se utiliza un TextWriter personalizado.
No estoy seguro de qué es exactamente lo que debo afirmar aquí ... por lo tanto, no hay afirmaciones en la prueba. ¿Es esta la forma correcta de probar este método ... alguna idea? por favor avise ?
Gracias
Gracias .. He echado un vistazo al HttpSimulator ... pero todavía no puedo seguir la forma de crear una HttpResponse falsa ... ¿podrían explicar un poco más? – Sennin