首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Telerik的Asp.NET MVC注册路由单元测试

基于Telerik的Asp.NET MVC注册路由单元测试
EN

Stack Overflow用户
提问于 2016-05-09 13:45:11
回答 1查看 535关注 0票数 1

我正在尝试Asp.NET MVC管理区路由联合测试与telerik只是模拟lite.But,我不能测试。

这是我的尝试代码:

代码语言:javascript
复制
        [TestMethod]
    public void AdminRouteUrlIsRoutedToHomeAndIndex()
    {
        //spts.saglik.gov.tr/admin
        //create route collection
        var routes = new RouteCollection();

        var areaRegistration = new AdminAreaRegistration();
        Assert.AreEqual("Admin",areaRegistration.AreaName);

        // Get an AreaRegistrationContext for my class. Give it an empty RouteCollection
        var areaRegistrationContext = new AreaRegistrationContext(areaRegistration.AreaName, routes);
        areaRegistration.RegisterArea(areaRegistrationContext);

        // Mock up an HttpContext object with my test path (using Moq)
        var context = Mock.Create<HttpContext>();
        context.Arrange(c=>c.Request.AppRelativeCurrentExecutionFilePath).Returns("~/Admin");

        // Get the RouteData based on the HttpContext
        var routeData = routes.GetRouteData(context.Request.RequestContext.HttpContext);

        //assert has route
        Assert.IsNotNull(routeData,"route config");

    }

var context = Mock.Create<HttpContext>();只是模拟告诉这个错误时

Telerik.JustMock.Core.ElevatedMockingException: Cannot mock 'System.Web.HttpContext'. JustMock Lite can only mock interface members, virtual/abstract members in non-sealed classes, delegates and all members on classes derived from MarshalByRefObject on instances created with Mock.Create or Mock.CreateLike. For any other scenario you need to use the full version of JustMock.

那么,我如何使用telerik进行区域注册路由单元测试?我怎样才能解决这个问题?

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-09 18:17:51

HttpContext是你不能嘲笑的东西。它包含的数据是特定于特定请求的。因此,为了使用HttpContext运行测试,您将实际在一个可以发出请求的环境中运行应用程序。

相反,您需要使用第三方工具,比如MvcRouteTest (https://github.com/AnthonySteele/MvcRouteTester)。它很容易使用,而且最重要的是,您可以在不运行应用程序的情况下运行测试。

代码语言:javascript
复制
[TestMethod]
public void AdminRouteUrlIsRoutedToHomeAndIndex()
{
    var routes = new RouteCollection();

    var areaRegistration = new AdminAreaRegistration();
    Assert.AreEqual("Admin", areaRegistration.AreaName);

    var areaRegistrationContext = new AreaRegistrationContext(areaRegistration.AreaName, routes);
    areaRegistration.RegisterArea(areaRegistrationContext);

    routes.ShouldMap("/admin").To<HomeController>(r => r.Index());
}

这既测试了区域注册,也测试了/admin URL的路径(有些人认为应该将其分成两个测试)。它假设您的AdminAreaRegistrationRegisterArea()方法构建默认路由,默认控制器设置为Home:

代码语言:javascript
复制
public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { controller="home", action = "Index", id = UrlParameter.Optional }
    );
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37117401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档