2014-09-23 57 views
4

我使用Moq来模拟HttpWebRequest。我能够嘲笑头&方法,但当我试图嘲笑接受时,它爆炸。嘲笑HttpWebRequest接受Moq

代码是:

Mock<HttpWebResponse> response = new Mock<HttpWebResponse>(MockBehavior.Loose); 
Mock<HttpWebRequest> request = new Mock<HttpWebRequest>(); 
request.Setup(s => s.GetResponse()).Returns(response.Object); 
request.Setup(m => m.Method).Returns("GET"); 
request.Setup(h => h.Accept).Returns("application/x-protobuf"); 

的例外是:

System.NotSupportedException was unhandled by user code 
HResult=-2146233067 Message=Invalid setup on a non-virtual 
(overridable in VB) member: h => h.Accept Source=Moq StackTrace: 
     at Moq.Mock.ThrowIfCantOverride(Expression setup, MethodInfo method) 
     at Moq.Mock.<>c__DisplayClass1f`2.<SetupGet>b__1e() 
     at Moq.PexProtector.Invoke[T](Func`1 function) 
     at Moq.Mock.SetupGet[T,TProperty](Mock mock, Expression`1 expression, Func`1 condition) 
     at Moq.Mock.<>c__DisplayClass1c`2.<Setup>b__1b() 
     at Moq.PexProtector.Invoke[T](Func`1 function) 
     at Moq.Mock.Setup[T,TResult](Mock mock, Expression`1 expression, Func`1 condition) 
     at Moq.Mock`1.Setup[TResult](Expression`1 expression) 
     at HarmonyTests.MockWebRequestCreate.CreateTestRequest(Stream protobuf) 
+0

相关[问题](http://stackoverflow.com/q/9823039/1698557) – 2014-09-23 19:12:21

回答

3

你所要做的是不能使用起订量。 Moq不能嘲笑一个具体实现的非虚拟方法(使用IInterface就可以)。

你有几个选项,

  1. 创建一个使用实现了一个简单的界面HttpWebRequest(如IHttpClient)和使用,在单元测试
  2. 使用不同的模拟框架(看看对于想法,请参阅this post)。