Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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# 如何在ASP.Net MVC 5中获得Controller.ActionInvoker.InvokeAction的结果?_C#_Asp.net_Asp.net Mvc_Moq - Fatal编程技术网

C# 如何在ASP.Net MVC 5中获得Controller.ActionInvoker.InvokeAction的结果?

C# 如何在ASP.Net MVC 5中获得Controller.ActionInvoker.InvokeAction的结果?,c#,asp.net,asp.net-mvc,moq,C#,Asp.net,Asp.net Mvc,Moq,我正在尝试使用ASP.Net MVC 5,使用controller.ActionInvoker.InvokeAction方法,并使用HttpContext mock,使用Moq对控制器方法进行集成测试: var httpContext = new Mock<HttpContextBase>(); var request = new Mock<HttpRequestBase>(); var response = new Mock<HttpResponseBase>

我正在尝试使用ASP.Net MVC 5,使用
controller.ActionInvoker.InvokeAction
方法,并使用HttpContext mock,使用Moq对控制器方法进行集成测试:

var httpContext = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
var user = new Mock<IPrincipal>();
var identity = new Mock<IIdentity>();

request.Setup(x => x.ApplicationPath).Returns("/");
request.Setup(x => x.Url).Returns(new Uri("http://localhost"));

identity.Setup(x => x.Name).Returns("admin");
user.Setup(x => x.Identity).Returns(identity.Object);

httpContext.Setup(x => x.User).Returns(user.Object);
httpContext.Setup(x => x.Items).Returns(new Dictionary<object, object>());
httpContext.Setup(x => x.Request).Returns(request.Object);
httpContext.Setup(x => x.Response).Returns(response.Object);

var controller = new MyController();
controller.ControllerContext = new ControllerContext(new RequestContext(httpContext.Object, new RouteData()), controller);

controller.ActionInvoker.InvokeAction(controller.ControllerContext, nameof(controller.Index));

// Do something to get either the HttpStatusCode and/or ActionResult
var httpContext=new Mock();
var request=newmock();
var response=newmock();
var user=new Mock();
var identity=newmock();
Setup(x=>x.ApplicationPath)。返回(“/”;
Setup(x=>x.Url).Returns(新Uri(“http://localhost"));
Setup(x=>x.Name).Returns(“admin”);
user.Setup(x=>x.Identity).Returns(Identity.Object);
Setup(x=>x.User).Returns(User.Object);
Setup(x=>x.Items).Returns(newdictionary());
Setup(x=>x.Request).Returns(Request.Object);
Setup(x=>x.Response).Returns(Response.Object);
var controller=new MyController();
controller.ControllerContext=newcontrollerContext(newrequestContext(httpContext.Object,newroutedata()),controller);
controller.ActionInvoker.InvokeAction(controller.ControllerContext,nameof(controller.Index));
//执行某些操作以获取HttpStatusCode和/或ActionResult
我的问题是: 调用InvokeAction后,如何获取HttpStatusCode和/或ActionResult


调试测试时,HttpStatusCode在模拟HttpContext中始终为0。

尝试
var response=controller.Index()时的结果是什么?我正在尝试进行集成测试,该测试考虑了控制器上的AuthorizationAttribute。因此,直接调用controller方法并不能提供我试图实现的功能。您可能希望在应用程序运行时对其进行测试,并通过
HttpClient
进行测试。他们在
.netcore
()中简化了这一点,但在
.netframework
中也是可行的。我记得在
IISExpress
中托管了一个版本,然后通过
HttpClient
(您可以在那里阅读
Http状态
)启动调用,但我不记得细节了。