Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何存根HttpControllerContext_C#_Asp.net Web Api_Stub_Microsoft Fakes - Fatal编程技术网

C# 如何存根HttpControllerContext

C# 如何存根HttpControllerContext,c#,asp.net-web-api,stub,microsoft-fakes,C#,Asp.net Web Api,Stub,Microsoft Fakes,我正在尝试对一段代码进行单元测试,该代码从WebAPI(OData)控制器调用并接收HttpControllerContext: public string MethodToTest(HttpControllerContext context) { string pub = string.Empty; if (context != null) { pub = context.Request.RequestUri.Segments[2].TrimEnd('

我正在尝试对一段代码进行单元测试,该代码从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对象。我该怎么做呢?我最初试图用微软的赝品来存根它,但HttpControllerContext似乎没有界面(为什么??),所以这似乎不是一个选项。我是否应该新建一个新的HttpControllerContext对象,或者存根它的构造函数参数?或者为此使用Moq框架(而不是!)

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


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

HttpContext.Current对于我来说仍然是空的this@Nick,在本例中,您应该引用controller.Context,而不是HttpContext.Current
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);