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

如何在FluentValidation单元测试中传递RootContextData?

如何在FluentValidation单元测试中传递RootContextData?

我太懂这种卡壳的感觉了!之前用FluentValidation写单元测试时,也纠结过怎么给测试里的验证上下文传RootContextData,毕竟默认的TestValidate()看起来确实没直接传上下文的入口。别慌,给你两个实用的解决办法:

  • 方法一:直接用验证器的Validate()方法做测试
    其实咱们业务代码里怎么传上下文,测试里就能怎么写,完全不用依赖TestValidate()。比如这样写:

    var person = new Person();
    var context = new ValidationContext<Person>(person);
    context.RootContextData["MyCustomData"] = "Test";
    
    var validator = new PersonValidator();
    var result = validator.Validate(context);
    
    // 接下来就像平时断言一样操作result就行,比如
    // Assert.True(result.IsValid);
    // 或者检查特定错误信息
    

    这种方式最直接,和业务代码的验证逻辑完全对齐,也不用记额外的测试API。

  • 方法二:用WithOptions()给TestValidate()加上下文配置
    如果你偏爱TestValidate()带来的链式断言语法(比如ShouldHaveValidationErrorFor()这种),那可以用WithOptions()方法来给上下文塞自定义数据:

    var person = new Person();
    var validator = new PersonValidator();
    
    validator.TestValidate(person)
        .WithOptions(opt => opt.ConfigureContext(ctx => 
            ctx.RootContextData["MyCustomData"] = "Test"
        ))
        // 这里接上你的断言,比如检查有没有错误
        .ShouldNotHaveAnyValidationErrors();
    

    这个ConfigureContext委托就是专门用来修改测试用的ValidationContext的,想加什么自定义数据都能在这里搞定。

两种方法都能用,看你平时写测试的习惯来选就行~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 13:29:29