Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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# 测试C时以编程方式访问控制器方法返回的Html字符串#_C#_Asp.net Mvc_Unit Testing - Fatal编程技术网

C# 测试C时以编程方式访问控制器方法返回的Html字符串#

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

我试图测试其中一种观点。首先,我验证并登录用户以获取所需的Cookies信息,然后我想从HomeController检查IndexView的外观

[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服务器并让它为您提供页面服务吗?