模拟 WebResponse 时设置 ContentEncoding

Set ContentEncoding when mocking WebResponse

我一直在研究如何设置内容编码 属性,因为它不能通过最小起订量覆盖。

我目前有:

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

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

这就是我要做的:

      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);

添加它而不是最后一行。