【问题标题】:Mocking HttpWebRequest Accept with Moq使用 Moq 模拟 HttpWebRequest 接受
【发布时间】:2014-11-18 01:43:56
【问题描述】:

我正在使用 Moq 来模拟 HttpWebRequest。我可以模拟 Headers & Method,但是当我尝试模拟 Accept 时它会爆炸。

代码是:

 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)

【问题讨论】:

标签: c# moq


【解决方案1】:

使用 Moq 无法实现您想要做的事情。 Moq 不能模拟具体实现的非虚拟方法(使用 IInterface 就可以了)。

你有几个选择,

  1. 创建一个使用HttpWebRequest(例如IHttpClient)实现的简单接口,并在您的单元测试中使用它
  2. 使用不同的模拟框架(请查看 this post 以获取想法)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2011-06-13
    • 2019-09-11
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多