用途
该技能用于指导 Blazor 应用的测试实践,覆盖从组件级到 API 集成级、再到真实数据库的测试场景。资料以代码示例形式展示了如何搭建测试项目、编写组件测试、验证表单行为、进行 API 集成测试以及使用容器化数据库进行测试。
主要能力
- 测试项目搭建:通过 dotnet CLI 创建 xUnit 测试项目,并添加 bUnit、FluentAssertions、NSubstitute、Microsoft.AspNetCore.Mvc.Testing、Testcontainers.PostgreSql 等测试依赖。
- bUnit 组件测试:使用 TestContext 渲染组件,通过 Find、Click、Change、Submit 等操作模拟用户交互,并对渲染结果进行断言。
- 参数与服务注入测试:使用 NSubstitute 创建服务替身,通过 Services.AddSingleton 注入,结合 WaitForState 等待异步状态更新。
- 表单测试:验证必填字段校验消息,以及提交有效数据后服务方法的调用情况。
- API 集成测试:使用 WebApplicationFactory 创建 HttpClient,替换数据库上下文为内存数据库,对 API 端点进行状态码与输入校验测试。
- 真实数据库测试:使用 Testcontainers 启动 PostgreSQL 容器,通过 IAsyncLifetime 管理容器生命周期,对数据库读写进行测试。
使用方式
资料中给出的使用方式为:先通过 dotnet new xunit 创建测试项目,再通过 dotnet add package 添加所需测试包。随后在测试类中继承 TestContext(bUnit)或使用 IClassFixture<WebApplicationFactory<Program>>(集成测试),编写 [Fact] 或 [Theory] 测试方法。组件测试通过 RenderComponent 渲染组件,使用 Find、FindAll 定位元素,使用 Click、Change、Submit 触发交互,使用 FluentAssertions 进行断言。服务依赖通过 NSubstitute 创建替身并注入 Services。API 测试通过 factory.WithWebHostBuilder 配置服务替换。数据库测试通过 PostgreSqlBuilder 构建容器并在 InitializeAsync 中启动。
适用场景
- 需要为 Blazor 组件编写单元测试与交互测试。
- 需要验证表单校验与提交逻辑。
- 需要对 Blazor 应用的后端 API 进行集成测试。
- 需要在接近真实数据库环境下验证数据访问逻辑。
限制
资料未提供关于该技能的具体安装方式、版本要求、平台限制、收费模式或性能表现等信息,暂未提供。资料中的代码示例基于 xUnit、bUnit、FluentAssertions、NSubstitute、WebApplicationFactory 与 Testcontainers,实际使用需确保相应依赖可用。