ユニットテストでApiControllerのUserプロパティを設定する 質問する

ユニットテストでApiControllerのUserプロパティを設定する 質問する

ApiController の単体テストでは、コントローラーをインスタンス化するためにいくつかのヘルパー メソッドを使用します。

public static ResourcesController SetupResourcesController(HttpRequestMessage request, IResourceMetadataRepository repo, IUnitOfWorkService unitOfWorkService)
{
    var config = new HttpConfiguration();
    var defaultRoute = config.Routes.MapHttpRoute(RouteNames.DefaultApi , "api/{controller}/{id}");
    var routeData = new HttpRouteData(defaultRoute, new HttpRouteValueDictionary { { "controller", "resources" } });

    var resourcesController = new ResourcesController(repo, unitOfWorkService)
    {
        ControllerContext = new HttpControllerContext(config, routeData, request),
        Request = request
    };
    resourcesController.Request.Properties.Add(HttpPropertyKeys.HttpRouteDataKey, routeData);
    resourcesController.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;

    // Compilation fail: The Property 'System.Web.Http.ApiController.User' has no setter.
    resourcesController.User = myStubUserPrincipal;

    return resourcesController;
}

私の質問は、コントローラーの User プロパティをどのように設定するかということです。

私はもう試した:

request.Properties.Add("MS_UserPrincipal", myStubUserPrincipal);

しかし、これも機能しません (resourcesController.User プロパティは null のままです)。

ベストアンサー1

を設定すると、コントローラー内のプロパティThread.CurrentPrincipalが自動的に初期化されます。User

この回答を見たけれど、設定方法が分からない人のためにCurrentPrincipal:このコードMSDN から抜粋したものです。

Thread.CurrentPrincipal = new GenericPrincipal
(
   new GenericIdentity("Bob", "Passport"),
   new[] {"managers", "executives"}
);

おすすめ記事