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

.NET集成测试中正确Mock请求客户端类的实现方法

问题根因

Mock未生效的核心原因是依赖注册逻辑错误:

  • 你在ConfigureTestServices中调用services.AddSingleton(dependency)时,没有显式指定服务类型为IGetAppointmentsClient,默认会把传入的Mock对象注册为其运行时的代理类类型,和控制器构造函数依赖的IGetAppointmentsClient接口类型不匹配。
  • DI容器解析IGetAppointmentsClient类型时,找不到你注册的Mock实例,就会继续使用Program启动阶段注册的真实客户端实现,最终发起真实外部请求触发异常。
    另外你贴的AppointmentController构造函数存在语法笔误,也会导致运行时错误。
修复步骤
  1. 修正测试服务替换逻辑,显式移除原有真实客户端注册,再绑定Mock实例到对应接口类型。修改TestServer中的ConfigureTestServices代码:
    .ConfigureTestServices(services =>
    {
        // 保留原有认证、授权测试配置
        services.AddAuthentication(TestAuthHandler.AuthenticationScheme)
            .AddScheme<AuthenticationSchemeOptions, TestAuthHandler>(
                TestAuthHandler.AuthenticationScheme, options => { });
    
        AddAuthorizationForTest(services);
    
        // 移除原有IGetAppointmentsClient的真实注册
        var clientServiceDesc = services.FirstOrDefault(
            s => s.ServiceType == typeof(IGetAppointmentsClient));
        if (clientServiceDesc != null)
        {
            services.Remove(clientServiceDesc);
        }
    
        // 遍历传入的依赖重写集合,显式按接口类型注册
        foreach (var dependency in _dependencyOverrides)
        {
            var serviceType = dependency.GetType().GetInterfaces()
                .FirstOrDefault(i => i.Name.StartsWith("I") && i.Name.Contains("Client"));
            // 针对IClient这类接口依赖,显式绑定接口到Mock实例
            if (serviceType != null)
            {
                services.AddSingleton(serviceType, dependency);
            }
        }
    });
    
    如果不需要通用依赖替换逻辑,也可以直接在ConfigureTestServices里写死注册,逻辑更直观:
    services.AddSingleton<IGetAppointmentsClient>(GetAppointmentsClientMock.Object);
    
  2. 修复AppointmentController构造函数的语法笔误,去掉多余的右括号:
    public AppointmentController(IGetAppointmentsClient appointmentsClient)
    {
        _appointmentsClient = appointmentsClient;
    }
    

修复后测试运行时,DI容器会正确解析到你Setup的Mock客户端,不会触发真实外部请求,接口会正常返回200 OK。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:45:47