Я пытаюсь создать модульные тесты для некоторого устаревшего кода. Один из классов, которые мне нужно протестировать, называется FileDownloader, у которого есть только один следующий метод:
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();
}
Мне не разрешено реорганизовывать этот код (что было бы идеально!).
Чтобы проверить это, я решил создать поддельный HttpContext на основе статьи ниже
С помощью этого я могу получить поддельный HttpContext во время выполнения теста, однако есть проблемы с подделкой HttpResponse.
Вот как выглядит мой тест например:
[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);
}
Я передаю в метод специально созданный объект HTTPResponse. Это вызывает следующее исключение, когда попадает в строку «response.BinaryWrite (content)»:
System.Web.HttpException: OutputStream недоступен при использовании настраиваемого TextWriter.
Я не уверен, что именно следует Я утверждаю здесь ... следовательно, в тесте нет утверждений. Это правильный способ проверить этот метод ... любые идеи. пожалуйста, посоветуйте?
Спасибо