HttpResponseBase.Headers are empty when running a test

I use Moq to create Mock<HttpResponseBase>for testing FileResult, which I create for my MVC2 application.

In the WriteFile(HttpResponseBase response)method FileResultat the end of the code, I have the following code:

// Write the final output with specific encoding.
response.OutputStream.Write(output, 0, output.Length);
response.AppendHeader("Content-Encoding", encoding);

It will use utf-8or gzipdepending on the encoding from the request header Accept-Encoding.

So then in my test I set mine Mock<HttpResponseBase>as follows:

var mockResponse = new Mock<HttpResponseBase>();
mockResponse.Setup(r => r.OutputStream).Returns(new MemoryStream());
mockResponse.Setup(r => r.Headers).Returns(new NameValueCollection());

But when I really verify that the header is set, it Content-Encodingalways returns null:

var response = mockResponse.Object;
Assert.AreEqual("utf-8", response.Headers["Content-Encoding"]);

The strange thing is that the OutputStream gets the data written to it, and I can say that it writes the correct value.

It is strange that when I really debug FileResultin a web project, the header is sent correctly.

- ? .

+5
3

AppendHeader, HttpResponseBase:

mockResponse
    .Setup(r => r.AppendHeader(It.IsAny<string>(), It.IsAny<string>()))
    .Callback((string k, string v) => mockResponse.Object.Headers.Add(k, v));

, AppendHeader - , HttpResponseBase .

, . , - .

+4

, , , HttpResponseBase. , (OutputStream ) SUT (System Under Test).

, Headers, , , AppendHeader, SUT. mocks, Moq, , AppendHeader .

: . Headers, AppendHeader.

Mock<HttpResponseBase> responseMock = new Mock<HttpResponseBase>();
//the rest of response setup
FileResult sut = new MyFileResult();
sut.WriteFile(responseMock.Object);
responseMock.Verify(response=>response.AppendHeader("Content-Encoding", "utf8"));

, Moq, mock object call, .

Mock<HttpResponseBase> responseMock = new Mock<HttpResponseBase>(){ CallBase = true };
//the rest of response setup
FileResult sut = new MyFileResult();
sut.WriteFile(responseMock.Object);
Assert.AreEqual("utf-8", responseMock.Object.Headers["Content-Encoding"]);

, . - , , . HttpResponseBase, , , , , , , .

+4

( , ), ,

var Response = new Mock<HttpResponseBase>();
Response.Setup(r => r.OutputStream).Returns(new MemoryStream()); 
Response.Setup(r => r.Headers).Returns(new NameValueCollection());
+2

All Articles