gpt4 book ai didi

c# - 如何使用 Moq 模拟 HttpRequestMessage

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:15 25 4
gpt4 key购买 nike

我正在开发网络 Api。它是一个 ASP.NET 应用程序。我需要为 HttpRequestMessage 类的方法 CreateResponse(HttpStatusCode statusCode, T value) 创建一个模拟。但是每次我执行我的测试并得到异常

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")

测试

        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 初始化失败。知道为什么它不起作用吗?

最佳答案

答案在错误信息中:

System.NotSupportedException: Invalid setup on an extension method

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

关于c# - 如何使用 Moq 模拟 HttpRequestMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54316587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com