SuperAPI AI 工具集

dotnet-testing-fluentvalidation-testing

测试与质量

查看项目

更新于 10-15 23:45

技能介绍

用途:为 FluentValidation 验证器编写单元测试,确保数据完整性、业务规则可读、输入安全,并在重构时提供保障。

主要能力:覆盖 7 种核心测试模式——基本字段验证、参数化测试([Theory]/[InlineData])、跨字段验证、时间相依验证(TimeProvider + FakeTimeProvider)、条件式验证(.When())、异步验证(MustAsync + TestValidateAsync,配合 NSubstitute Mock 外部服务)、集合验证。核心 API 包括 TestValidate/TestValidateAsync、ShouldHaveValidationErrorFor、ShouldNotHaveValidationErrorFor、ShouldNotHaveAnyValidationErrors,以及 WithErrorMessage、WithErrorCode。

使用方式:安装 FluentValidation、xunit、Microsoft.Extensions.TimeProvider.Testing、NSubstitute、AwesomeAssertions 等包;FluentValidation.TestHelper 命名空间已包含在主包中,无需额外安装,只需 using FluentValidation.TestHelper;。示例:var result = _validator.TestValidate(new UserRegistrationRequest { Username = "" }); result.ShouldHaveValidationErrorFor(x => x.Username).WithErrorMessage("使用者名稱不可為 null 或空白");。

适用场景:Validator 类测试、业务规则验证、错误消息验证、跨字段逻辑、异步与时间相依验证。

限制与注意:FluentValidation 12.0 为主要版本升级,最低需求 .NET 8;已移除 Transform/TransformForEach、InjectValidator、CascadeMode.StopOnFirstFailure,ShouldHaveAnyValidationError 更名为 ShouldHaveValidationErrors。建议避免 DateTime.Now、硬编码测试数据与过度耦合,并测试边界值与错误消息。具体迁移细节与完整代码示例请参阅官方升级指南与技能内 references/templates 文件。