Tôi đang cố gắng tạo các kiểm tra đơn vị cho một số mã cũ. Một trong những lớp học mà tôi phải kiểm tra được gọi là FileDownloader trong đó có chỉ là một phương pháp sau đây:Chế nhạo HTTPResponse trong một thử nghiệm đơn vị
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();
}
tôi không được phép để cấu trúc lại mã này (lẽ ra là lý tưởng!).
Để kiểm tra này, tôi quyết định tạo ra một HttpContext giả dựa trên các bài viết dưới đây
Với điều này tôi có thể có được một giả HttpContext trong khi thực hiện thử nghiệm của tôi, tuy nhiên có những vấn đề với giả mạo HttpResponse.
Đây là cách thử nghiệm của tôi trông giống như:
[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);
}
Tôi đang đi qua một tùy chỉnh được tạo HttpResponse đối tượng để phương pháp này. Điều này ném ngoại lệ sau khi nó chạm vào dòng "response.BinaryWrite (content)":
System.Web.HttpException: OutputStream không khả dụng khi sử dụng TextWriter tùy chỉnh.
Tôi không chắc mình nên khẳng định chính xác điều gì ở đây .. do đó không có xác nhận nào trong thử nghiệm. Đây có phải là cách chính xác để kiểm tra phương pháp này ... bất kỳ ý tưởng nào. xin vui lòng tư vấn cho?
Cảm ơn
Cảm ơn .. Tôi đã xem xét HttpSimulator .. nhưng tôi vẫn không thể làm theo cách tạo HttpResponse giả ... bạn có thể vui lòng xây dựng một chút không. – Sennin