gpt4 book ai didi

asp.net-mvc-3 - 如何使用 FluentValidation.TestHelper 使用 When() 条件对子验证器进行单元测试

转载 作者:行者123 更新时间:2023-12-03 12:01:43 27 4
gpt4 key购买 nike

FluentValidation.TestHelper 命名空间中的扩展方法 .ShouldHaveChildValidator() 没有采用模型的重载。在使用 When() 子句时,如何测试子验证器是否正确设置,如下例所示?

例如。

public class ParentModel
{
public bool SomeCheckbox { get; set; }

public ChildModel SomeProperty { get; set; }
}

public class ParentModelValidator : AbstractValidator<ParentModel>
{
RuleFor(m => m.SomeProperty)
.SetValidator(new ChildModelValidator())
.When(m => m.SomeCheckbox);
}

我想断言,如果 SomeCheckbox 为真,则子验证器存在,如果 SomeCheckbox 为假,则子验证器不存在。

到目前为止,我在单元测试中有以下内容:
ParentModelValidator validator = new ParentModelValidator();
validator.ShouldHaveChildValidator(
m => m.SomeProperty,
typeof(ChildModelValidator));

但这并没有考虑到 .When() 条件。

我注意到 FluentValidation.TestHelper 命名空间中的其他方法(例如 .ShouldHaveValidationErrorFor() 具有采用模型的重载,因此通过设置满足前提条件的模型,可以轻松地使用 When() 子句测试简单的属性类型。

有任何想法吗?

最佳答案

这是我如何实现这一目标的片段:

public class ParentModelSimpleValidator : AbstractValidator<ParentModel>
{
public ParentModelSimpleValidator()
{
When(x => x.HasChild, () =>
RuleFor(x => x.Child)
.SetValidator(new ChildModelSimpleValidator()));
}
}

public class ChildModelSimpleValidator : AbstractValidator<ChildModel>
{
public ChildModelSimpleValidator()
{
RuleFor(x => x.ChildName)
.NotEmpty()
.WithMessage("Whatever");
}
}

以下是相关的简化模型:
[Validator(typeof(ParentModelSimpleValidator))]
public class ParentModel
{
public bool HasChild { get { return Child != null; } }
public ChildModel Child { get; set; }
}

[Validator(typeof(ChildModelSimpleValidator))]
public class ChildModel
{
public string ChildName { get; set; }
public int? ChildAge { get; set; }
}

这是一个示例单元测试:
[TestMethod]
public void ShouldValidateChildIfParentHasChild()
{
var validator = new ParentModelSimpleValidator();

var model = new ParentModel
{
ParentName = "AABBC",
Child = new ChildModel { ChildName = string.Empty }
};

validator.ShouldHaveErrorMessage(model, "Whatever");
}

关于asp.net-mvc-3 - 如何使用 FluentValidation.TestHelper 使用 When() 条件对子验证器进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9018191/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com