C# 使用Moq模拟HttpWebRequest接受

C# 使用Moq模拟HttpWebRequest接受,c#,moq,C#,Moq,我使用Moq模拟HttpWebRequest。我可以模拟头和方法,但当我尝试模拟接受时,它会崩溃 代码是: Mock<HttpWebResponse> response = new Mock<HttpWebResponse>(MockBehavior.Loose); Mock<HttpWebRequest> request = new Mock<HttpWebRequest>(); request.Setup(s => s.GetRes

我使用Moq模拟HttpWebRequest。我可以模拟头和方法,但当我尝试模拟接受时,它会崩溃

代码是:

 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");
Mock响应=新的Mock(MockBehavior.Loose);
模拟请求=新建模拟();
request.Setup(s=>s.GetResponse()).Returns(response.Object);
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)
System.NotSupportedException未由用户代码处理
HResult=-2146233067消息=非虚拟服务器上的设置无效
(在VB中可重写)成员:h=>h.Accept Source=Moq StackTrace:
在Moq.Mock.ThrowIfCantOverride(表达式设置,MethodInfo方法)
在Moq.Mock.c_uuu显示class1f`2.b_uuu1e()
在Moq.PexProtector.Invoke[T](Func`1函数)
在Moq.Mock.SetupGet[T,TProperty](Mock-Mock,表达式'1表达式,函数'1条件)
在Moq.Mock.c_uuu显示Class1C`2.b_uuu1b()
在Moq.PexProtector.Invoke[T](Func`1函数)
在Moq.Mock.Setup[T,TResult](模拟模拟,表达式'1表达式,函数'1条件)
在Moq.Mock`1.Setup[TResult](表达式`1表达式)
在HarmonyTests.MockWebRequestCreate.CreateTestRequest(streamprotobuf)

使用Moq无法执行您试图执行的操作。Moq不能模拟具体实现的非虚拟方法(使用
IInterface
就可以了)

你有两个选择

  • 创建一个使用
    HttpWebRequest
    (例如
    IHttpClient
    )实现的简单接口,并在单元测试中使用该接口
  • 使用不同的模拟框架(查看想法)
  • 相关的