如何存根 HttpControllerContext

2023-11-25

我正在尝试对从 WebAPI (OData) 控制器调用并接受 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 对其进行存根,但 HttpControllerContext 似乎没有接口(为什么?),所以这似乎不是一个选择。我应该新建一个新的 HttpControllerContext 对象并存根其构造函数参数吗?或者使用 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只是一个容器,因此不必对其本身进行模拟。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何存根 HttpControllerContext 的相关文章

随机推荐