Мокинг HTTPResponse в модульном тесте

Я пытаюсь создать модульные тесты для некоторого устаревшего кода. Один из классов, которые мне нужно протестировать, называется 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.

Я не уверен, что именно следует Я утверждаю здесь ... следовательно, в тесте нет утверждений. Это правильный способ проверить этот метод ... любые идеи. пожалуйста, посоветуйте?

Спасибо

6
задан Cheng Chen 29 December 2010 в 09:27
поделиться