模拟WebResponse时设置ContentEncoding

时间:2015-02-14 01:25:56

标签: c# moq

我坚持如何设置contentencoding属性,因为它不能通过moq覆盖。

我目前有以下内容:

var expected = "dfgdfgdfgdfg";
var expectedBytes = Encoding.UTF8.GetBytes(expected);
var responseStream = new MemoryStream();
responseStream.Write(expectedBytes, 0, expectedBytes.Length);
responseStream.Seek(0, SeekOrigin.Begin);

var response = new Mock<HttpWebResponse>();
response.Setup(c => c.GetResponseStream()).Returns(responseStream);
response.Setup(c => c.ContentEncoding).Returns("UTF8");

但我得到以下例外:

 Result Message:    Invalid setup on a non-virtual (overridable in VB) member: c => c.ContentEncoding

知道如何模仿这个属性吗?

1 个答案:

答案 0 :(得分:2)

这就是我要做的事情:

      var webHeaderCollectionFieldInfo = typeof (HttpWebResponse).GetField("m_HttpResponseHeaders",
        BindingFlags.Instance | BindingFlags.NonPublic);

      var webHeaderCollection = new WebHeaderCollection();
      webHeaderCollection.Set("Content-Encoding", "cheese");
      webHeaderCollectionFieldInfo.SetValue(response.Object, webHeaderCollection);

添加而不是最后一行。