首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Moq模拟HttpRequestMessage

如何用Moq模拟HttpRequestMessage
EN

Stack Overflow用户
提问于 2019-01-22 21:18:29
回答 1查看 3.7K关注 0票数 2

我在做一个网络应用程序。这是一个ASP.NET应用程序。我需要为CreateResponse类的方法HttpStatusCode statusCode,T值创建一个模拟。但是每次我执行我的测试并得到异常

代码语言:javascript
复制
Test Name:  RHT.Tests.Controllers.AccountControllerTests.Can_login_with_valid_credentials
Test FullName:  RHT.Tests.Controllers.AccountControllerTests.Can_login_with_valid_credentials
Test Source:    Controllers\AccountControllerTests.cs : line 23
Test Outcome:   Failed
Test Duration:  0:00:01.028

Result StackTrace:  
at Moq.Mock.ThrowIfSetupExpressionInvolvesUnsupportedMember(Expression setup, MethodInfo method) in C:\projects\moq4\src\Moq\Mock.cs:line 755
   at Moq.Mock.SetupNonVoidPexProtected(Mock mock, LambdaExpression expression, Condition condition) in C:\projects\moq4\src\Moq\Mock.cs:line 433
   at Moq.PexProtector.Invoke[T1,T2,T3,TResult](Func`4 function, T1 arg1, T2 arg2, T3 arg3) in C:\projects\moq4\src\Moq\PexProtector.cs:line 38
   at Moq.Mock.SetupNonVoid(Mock mock, LambdaExpression expression, Condition condition) in C:\projects\moq4\src\Moq\Mock.cs:line 421
   at Moq.Mock`1.Setup[TResult](Expression`1 expression) in C:\projects\moq4\src\Moq\Mock.Generic.cs:line 317
   at RHT.Tests.Controllers.AccountControllerTests.Can_login_with_valid_credentials() in C:\Users\ttong\source\repos\RedHawkTestPlan\RHT.Tests\Controllers\AccountControllerTests.cs:line 51
Result Message: System.NotSupportedException : Invalid setup on an extension method: m => m.CreateResponse<string>(HttpStatusCode.OK, "value")

测试

代码语言:javascript
复制
        Mock<IAuthProvider> auth = new Mock<IAuthProvider>();
        auth.Setup(m => m.CreateEncryptedCookieValue(
            It.IsAny<bool>(), It.IsAny<string>()))
            .Returns("my_ticket");

        Mock<HttpRequestMessage> req = new Mock<HttpRequestMessage>();
        req.Setup(m => m.CreateResponse(
            HttpStatusCode.OK, "value"))
            .Returns(new HttpResponseMessage(HttpStatusCode.OK));

该测试方法有3个模拟对象。但是只有HttpRequestMessage无法初始化。知道为什么不能用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-22 21:31:05

答案在错误消息中:

System.NotSupportedException:扩展方法上的无效设置

CreateResponse不是HttpRequestMessage类的方法,而是一种扩展方法。扩展方法不能被模仿,因为它们实际上是幕后的静态方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54316587

复制
相关文章

相似问题

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