Asp.net mvc 在ASP.NET WebApi控制器中模拟用户.Identity

Asp.net mvc 在ASP.NET WebApi控制器中模拟用户.Identity,asp.net-mvc,asp.net-web-api,asp.net-apicontroller,Asp.net Mvc,Asp.net Web Api,Asp.net Apicontroller,如何模拟ASP.NET WebApi APIController的User.Identity[用于单元测试] 注意: 一些控制器方法返回的是aync[Task],它们运行在不同的线程上我必须为MVC控制器测试做类似的事情。我最后做的是将一个假的HttpContext附加到控制器,然后将一个GenericPrincipal附加到假上下文 var myController = new SomeController(); var context = A.Fake<HttpContextBase&

如何模拟ASP.NET WebApi APIController的User.Identity[用于单元测试]

注意:


一些控制器方法返回的是
aync[Task]
,它们运行在不同的线程上

我必须为MVC控制器测试做类似的事情。我最后做的是将一个假的HttpContext附加到控制器,然后将一个GenericPrincipal附加到假上下文

var myController = new SomeController();
var context = A.Fake<HttpContextBase>();
ControllerContext context = new ControllerContext( new RequestContext( context, new RouteData() ), myController );
myController.ControllerContext = context;
myController.HttpContext.User = new GenericPrincipal( new GenericIdentity( "bob" ), null );
var myController=newsomecontroller();
var context=A.Fake();
ControllerContext context=newControllerContext(newRequestContext(context,newRoutedData()),myController);
myController.ControllerContext=上下文;
myController.HttpContext.User=新的GenericPrincipal(新的GenericEntity(“bob”),null;

我使用的是FakeiTasy,因此生成假货的语法可能与您不同。

这可能会有所帮助:我建议使用内存中的http服务器进行集成测试。您可以将委托处理程序插入管道以处理身份验证。这可能会有所帮助。WebApi ApicController使用HttpControllerContext,并且没有HttpContext属性