2015-02-14 5 views
1

Я зациклился на том, как установить свойство contentencoding, поскольку оно не переопределяется через moq.Set ContentEncoding при издевательском образе 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 

Любая идея, как я могу высмеивать эту недвижимость?

+0

Попытайтесь посмотреть http://stackoverflow.com/questions/9823039/is-it-possible-to-mock-out-a-net-httpwebresponse –

+0

@IlyaKogan Спасибо, я посмотрел на это, прежде чем, тем не менее, даже с этот пример кода ContentEncoding prperty throws «response.ContentEncoding» бросил исключение типа «System.NullReferenceException» –

ответ

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

добавить, что вместо последней строки.

+0

Wow! Я пошел спать с унынием, но проснулся, чтобы найти, что ваш ответ работает как шарм! Одна вещь, которую я не понимаю, - это то, как класс webresponse выбирает кодировку контента, потому что ваш код, кажется, нигде не передается, это как-то связано с методами Set и SetValue? –

+0

@ImranAzad Этот код использует отражение. если вы используете свойство 'HttpWebResponse.ContentEncoding', вы увидите, что он просто возвращает заголовок из частной коллекции полей, так что это то, что мы получили, чтобы установить желаемый результат. – zaitsman