gpt4 book ai didi

c# - 如何 stub HttpControllerContext

转载 作者:可可西里 更新时间:2023-11-01 08:37:09 27 4
gpt4 key购买 nike

我正在尝试对从 WebAPI (OData) Controller 调用并接受 HttpControllerContext 的一段代码进行单元测试:

public string MethodToTest(HttpControllerContext context)
{
string pub = string.Empty;

if (context != null)
{
pub = context.Request.RequestUri.Segments[2].TrimEnd('/');
}

return pub;
}

为了对此进行单元测试,我需要一个 HttpControllerContext 对象。我该怎么办?我最初试图用 Microsoft Fakes stub 它,但 HttpControllerContext 似乎没有接口(interface)(为什么??),所以这似乎不是一个选项。我应该只新建一个新的 HttpControllerContext 对象并可能 stub 它的构造函数参数吗?或者为此使用 Moq 框架(而不是!)

最佳答案

您可以简单地实例化一个 HttpControllerContext 并为其分配上下文对象,以及路由信息(您可以模拟所有这些):

var controller = new TestController();
var config = new HttpConfiguration();
var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/api/test");
var route = config.Routes.MapHttpRoute("default", "api/{controller}/{id}");
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { "controller", "test" } });

controller.ControllerContext = new HttpControllerContext(config, routeData, request);
controller.Request = request;
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;

// Call your method to test
MethodToTest(controller);

HttpControllerContext 只是一个容器,因此它本身不必被模拟。

关于c# - 如何 stub HttpControllerContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21261992/

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