在使用AutoFixture生成测试数据时,可以结合FluentValidation对数据进行校验,确保生成的数据符合指定的规则。
示例代码如下:
使用FluentValidation定义数据模型的规则:
public class Order
{
public int Id { get; set; }
public string CustomerName { get; set; }
public DateTime OrderDate { get; set; }
public decimal TotalAmount { get; set; }
}
public class OrderValidator : AbstractValidator
{
public OrderValidator()
{
RuleFor(order => order.Id).GreaterThan(0);
RuleFor(order => order.CustomerName).NotEmpty();
RuleFor(order => order.OrderDate).Must(BeAValidDate);
RuleFor(order => order.TotalAmount).GreaterThan(0);
}
private bool BeAValidDate(DateTime date)
{
return date != default(DateTime);
}
}
利用AutoFixture生成符合规则的测试数据:
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var order = fixture.Build()
.With(o => o.TotalAmount, 100m)
.Create();
var validator = new OrderValidator();
var result = validator.Validate(order);
Assert.True(result.IsValid);
以上代码保证了在生成Order实例时,符合OrderValidator的规则。如果不符合,Validator.Validate()方法会返回Invalid的ValidationResult。