C# 测试C时以编程方式访问控制器方法返回的Html字符串#
我试图测试其中一种观点。首先,我验证并登录用户以获取所需的Cookies信息,然后我想从HomeController检查IndexView的外观C# 测试C时以编程方式访问控制器方法返回的Html字符串#,c#,asp.net-mvc,unit-testing,C#,Asp.net Mvc,Unit Testing,我试图测试其中一种观点。首先,我验证并登录用户以获取所需的Cookies信息,然后我想从HomeController检查IndexView的外观 [TestClass] public class HomeControllerTest { [TestMethod] public void IndexView() { // Setup Moq config for controller context moqContext = new Mock
[TestClass]
public class HomeControllerTest
{
[TestMethod]
public void IndexView()
{
// Setup Moq config for controller context
moqContext = new Mock<HttpContextBase>();
moqRequest = new Mock<HttpRequestBase>();
moqResponse = new Mock<HttpResponseBase>();
moqSession = new Mock<HttpSessionStateBase>();
moqServer = new Mock<HttpServerUtilityBase>();
var fakeIdentity = new GenericIdentity("User");
var principal = new GenericPrincipal(fakeIdentity, null);
moqContext.Setup(x => x.Request).Returns(moqRequest.Object);
moqContext.Setup(x => x.Request.Cookies).Returns(new HttpCookieCollection());
moqContext.Setup(x => x.Response).Returns(moqResponse.Object);
moqContext.Setup(x => x.Response.Cookies).Returns(new HttpCookieCollection());
moqContext.Setup(x => x.Session).Returns(moqSession.Object);
moqContext.Setup(x => x.Server).Returns(moqServer.Object);
moqContext.Setup(x => x.User).Returns(principal);
var contextRequest = new HttpRequest("", "http://localhost:port/User/Login", "");
var contextResponse = new HttpResponse(new StringWriter());
HttpContext.Current = new HttpContext(contextRequest, contextResponse);
HttpContext.Current.User = principal;
// Authenticate User
IUserAppService _usuarioApp = _container.GetInstance<IUserAppService>();
var user = _usuarioApp.AutenticateUser("user", "password");
var userController = _container.GetInstance<UserController>();
userController.ControllerContext = new ControllerContext(moqContext.Object, new RouteData(), userController);
var res = userController.RealizaLogin(true, "", user) as RedirectToRouteResult;
foreach (var key in moqContext.Object.Response.Cookies.AllKeys)
{
var cookieItem = moqContext.Object.Response.Cookies[key];
HttpContext.Current.Request.Cookies.Add(cookieItem);
moqContext.Object.Request.Cookies.Add(cookieItem);
}
var homeController = _container.GetInstance<HomeController>();
homeController.ControllerContext = new ControllerContext(moqContext.Object, new RouteData(), userController);
var result = homeController.Index() as ViewResultBase;
//here do not know what to do
}
}
[TestClass]
公共类家庭控制器测试
{
[测试方法]
公共无效索引视图()
{
//为控制器上下文设置Moq配置
moqContext=新建模拟();
moqRequest=新模拟();
moqResponse=新模拟();
moqSession=新模拟();
moqServer=newmock();
var fakeIdentity=新的GenericEntity(“用户”);
var principal=新的GenericPrincipal(fakeIdentity,null);
Setup(x=>x.Request).Returns(moqRequest.Object);
moqContext.Setup(x=>x.Request.Cookies).Returns(新的HttpCookieCollection());
Setup(x=>x.Response).Returns(moqResponse.Object);
moqContext.Setup(x=>x.Response.Cookies).Returns(新的HttpCookieCollection());
Setup(x=>x.Session).Returns(moqSession.Object);
Setup(x=>x.Server).Returns(moqServer.Object);
moqContext.Setup(x=>x.User).Returns(主体);
var contextRequest=newhttprequest(“,”http://localhost:port/User/Login", "");
var contextResponse=new-HttpResponse(new-StringWriter());
当前=新的HttpContext(contextRequest,contextResponse);
HttpContext.Current.User=主体;
//验证用户
IUserAppService\u usuariaApp=\u container.GetInstance();
var user=_usuariapp.AutenticateUser(“用户”、“密码”);
var userController=_container.GetInstance();
userController.ControllerContext=新的ControllerContext(moqContext.Object,new RoutedData(),userController);
var res=userController.RealizationLogin(true,“,user)作为RedirectToRouteResult;
foreach(moqContext.Object.Response.Cookies.AllKeys中的var键)
{
var cookieItem=moqContext.Object.Response.Cookies[key];
HttpContext.Current.Request.Cookies.Add(cookieItem);
moqContext.Object.Request.Cookies.Add(cookieItem);
}
var homeController=_container.GetInstance();
homeController.ControllerContext=新的ControllerContext(moqContext.Object,new RoutedData(),userController);
var result=homeController.Index()作为ViewResultBase;
//这里不知道该怎么办
}
}
但是我不知道如何得到这个呈现的HTML。有办法吗?有办法对应用程序进行UI测试吗?这就是你的意思吗?例如,您可以使用selenium。有很多。这就是您想要的吗?我想您必须调用Handling它作为controllerContext实例。@panoskarajohn,重点是“查看”用户对视图的看法,并检查视图中的关键元素是否匹配。@rene您可能是对的,我尝试使用ExecuteSult,但在
System.Web.WebPages.DisplayModeProvider.GetDisplayMode()
上收到nullReferenceException。是的,你正在陷入一个沼泽,只有模拟整个asp.net http处理管道,你才能摆脱它。作为测试启动的一部分,您不能启动dev服务器并让它为您提供页面服务吗?