首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Moq模拟HttpWebRequest接受

用Moq模拟HttpWebRequest接受
EN

Stack Overflow用户
提问于 2014-09-23 18:20:36
回答 1查看 2.2K关注 0票数 5

我使用Moq来模拟一个HttpWebRequest。我能够模拟头和方法,但是当我试图模拟接受时,它就会爆炸。

守则是:

代码语言:javascript
复制
 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");

例外是:

代码语言:javascript
复制
 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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-23 19:15:54

您想要做的是不可能使用Moq。Moq不能模拟具体实现的非虚拟方法(使用IInterface很好)。

你有几个选择,

  1. 创建一个使用HttpWebRequest (例如IHttpClient)实现的简单接口,并在单元测试中使用该接口
  2. 使用不同的模拟框架(查看this post的想法)。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26002084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档