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

如何为注入Radzen DialogService的Blazor组件编写bUnit单元测试?

解决bUnit测试Radzen DialogService注入问题

问题核心在于bUnit的TestContext是独立的测试容器,项目program.cs里的服务注册不会自动同步到测试环境,必须在测试类里手动注册DialogService相关依赖。另外你的测试代码里还有个参数绑定错误,一起修正:

步骤1:修正组件参数绑定错误

原测试代码里的ClientProcessor="mockDatabaseProcessing.Object"是把字符串传给了组件,不是你的Mock对象,要改成绑定表达式:

var cut = Render(@<DefaultProcessingTemplate ClientProcessor="@mockDatabaseProcessing.Object" />);

步骤2:在测试中注册DialogService

根据测试需求选以下两种方案:

方案一:注册模拟的DialogService(推荐,适合仅测试组件渲染的场景)

如果你的测试只是验证标题是否存在,不需要实际调用DialogService的方法,用Moq模拟一个空实现即可:

@using ClientProcessing.BlazorServer.Components.Shared
@using ClientProcessing.Library
@using Moq
@using Radzen
@using Radzen.Blazor

@inherits TestContext
@code {
    [Fact]
    public void ReportingSectionHeadingExists()
    {
        // 1. 模拟DialogService并注册到测试容器
        var mockDialogService = new Mock<DialogService>();
        Services.AddSingleton(mockDialogService.Object);
        
        // 2. 模拟IJSRuntime(DialogService依赖该服务,必须注册)
        var mockJSRuntime = new Mock<IJSRuntime>();
        Services.AddSingleton(mockJSRuntime.Object);

        // 3. 模拟业务对象,若OnInitialized用到GetCurrMo需设置返回值
        Mock<IDataProcessing> mockDatabaseProcessing = new Mock<IDataProcessing>();
        mockDatabaseProcessing.Setup(x => x.GetCurrMo()).Returns(DateTime.Now);

        // 4. 渲染组件并断言
        var cut = Render(@<DefaultProcessingTemplate ClientProcessor="@mockDatabaseProcessing.Object" />);
        var reportingHeading = cut.FindComponent<RadzenHeading>();

        Assert.Equal("Reporting", reportingHeading.Instance.Text);
    }
}

方案二:注册真实的Radzen DialogService

如果需要验证DialogService的调用逻辑(比如点击按钮后是否触发OpenAsync),可以注册真实实例,但仍需依赖模拟的IJSRuntime:

// 替换方案一中的DialogService注册代码
Services.AddSingleton<DialogService>(sp => new DialogService(sp.GetRequiredService<IJSRuntime>()));

为什么program.cs的注册不生效?

bUnit的TestContext会创建全新的独立服务容器,和项目启动时的容器完全隔离,目的是保证测试环境不受外部依赖干扰,所以组件依赖的所有服务都需要在测试类里单独注册。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:33:21