【发布时间】:2017-10-27 13:34:13
【问题描述】:
我正在尝试为 web api 控制器模拟 HttpContext 并使用 moq 并且在谷歌搜索后没有得到任何关于 web api 控制器的相关帖子,所以请帮助我。
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
var session = new Mock<HttpSessionStateBase>();
var server = new Mock<HttpServerUtilityBase>();
context.Setup(c => c.Request).Returns(request.Object);
context.Setup(c => c.Response).Returns(response.Object);
context.Setup(c => c.Session).Returns(session.Object);
context.Setup(c => c.Server).Returns(server.Object);
return context.Object;
这种方式适用于 MVC,但不适用于 Web api,因为我们可以在 MVC 中将 HttpContextBase 传递给 ControllerContext,但不能在 Web API 中。
【问题讨论】:
-
当前状态的问题不清楚,因为它不完整。阅读How to Ask,然后提供minimal reproducible example,可以用来更好地理解您的问题。
-
同时停止将您的代码与
HttpContext紧密耦合,这是一个难以测试的实现问题。您可以通过正确构建代码来避免该问题。将HttpContext视为第 3 方依赖项。 -
也就是说,有没有办法在web api中模拟httpcontext而不作为外部依赖传递?
-
视情况而定。您需要提供更多关于您正在尝试做的事情的背景信息。
-
请检查问题是否明确。
标签: c# unit-testing asp.net-web-api moq