如何在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
相关产品推荐
相关产品推荐

