You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XUnit和Moq测试Asp.Net MVC Core ErrorController时RouteData报错

解决RouteData实例化编译错误的方案

问题原因

ASP.NET Core 3.0+版本中,RouteData的构造函数不再提供无参重载,必须传入pageType和routeValues两个必填参数,这是导致你编译报错的核心原因。

解决方法

方法1:按构造函数要求传入参数

测试场景下可以直接传入null作为页面类型,搭配空字典作为路由值:

var routeData = new RouteData(null, new Dictionary<string, object?>());

方法2:通过控制器上下文初始化

在测试控制器时,更规范的方式是给控制器的ControllerContext赋值,自动关联RouteData:

var errorController = new ErrorController();
errorController.ControllerContext = new ControllerContext
{
    RouteData = new RouteData(null, new Dictionary<string, object?>())
};

方法3:反射创建无参实例(仅测试场景)

如果不需要使用RouteData的实际功能,可通过反射绕过构造函数限制:

var routeData = (RouteData)Activator.CreateInstance(typeof(RouteData), nonPublic: true);

调整后的测试代码示例

using Xunit;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;

public class ErrorControllerTests
{
    [Fact]
    public void HttpStatusCodeHandler_404_ReturnsView()
    {
        // 初始化控制器及上下文
        var controller = new ErrorController();
        controller.ControllerContext = new ControllerContext
        {
            RouteData = new RouteData(null, new Dictionary<string, object?>())
        };

        // 执行测试方法
        var result = controller.HttpStatusCodeHandler(404);

        // 断言结果类型
        Assert.IsType<ViewResult>(result);
    }
}

内容的提问来源于stack exchange,提问作者Goober

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:33:19