数据验证在大多数应用程序中都很常见。Fluent Validations是执行数据验证数据输入的一种非常流行的方式。
这是关于如何对这些验证进行单元测试以确保它们执行预期验证的技巧。
本技巧假设您对设置控制台应用程序和单元测试项目有基本的了解。
这是该FluentValidation页面的链接,可获取有关其库的更多信息和文档。
这是整个项目代码的GitHub链接。
单元测试有很多不同的测试运行器,这个技巧使用MS Test作为测试运行器,如果你使用XUnit或NUnit或其他一些单元测试运行器,语法可能会有所不同。
这是一个基本的.NET Framework 4.8控制台应用程序,用于设置程序代码。
该程序执行以下基本步骤:
item验证类继承自FluentValidations AbstractValidator基类:
using FluentValidation;using FluentValidation.Results;using System;using System.Collections.Generic; namespace UnitTestFluentValidations{ class Program { static void Main(string[] args) { var item = new Item(12345, 23456789, new DateTime(1900, 01, 01)); var itemValidator = new ItemValidator(); ValidationResult results = itemValidator.Validate(item); bool success = results.IsValid; IList<validationfailure> failures = results.Errors; Console.WriteLine(failures); } } public class Item { public Item() { } public Item(int clientId, long orgUid, DateTime checkDate) { _clientId = clientId; _orgUid = orgUid; _checkDate = checkDate; } private int _clientId { get; set; } private long _orgUid { get; set; } private DateTime _checkDate { get; set; } public int ClientId { get { return _clientId; } set { _clientId = value; } } public long OrgUid { get { return _orgUid; } set { _orgUid = value; } } public DateTime CheckDate { get { return _checkDate;} set { _checkDate = value; } } } public class ItemValidator : AbstractValidator<item> { public ItemValidator() { RuleFor(x => x.ClientId).GreaterThan(0).NotNull().WithMessage ("ClientId cannot be null"); RuleFor(x => x.OrgUid).NotNull().GreaterThan(0). WithMessage("OrgUid cannot be null"); RuleFor(x => x.CheckDate).Must(BeAValidDate).WithMessage ("Check date must be a validate date"); } private bool BeAValidDate(DateTime date) { return !date.Equals(default(DateTime)); } }}
这是用于程序的packages.config:
<!--?xml version="1.0" encoding="utf-8"?--><packages> <package id="FluentValidation" targetframework="net48" version="9.5.1"></package></packages>
这是单元测试代码,用于布置测试以验证在程序中创建的验证是否按预期执行。
using FluentValidation.TestHelper;using Microsoft.VisualStudio.TestTools.UnitTesting;using System;using UnitTestFluentValidations; namespace FluentValidationTests{ [TestClass] public class FluentValidationTests { private ItemValidator validator; [TestInitialize] public void TestInitialize() { validator = new ItemValidator(); } [TestMethod] public void Validate_ClientId_Is_Null() { var item = new Item { OrgUid = 123456, CheckDate = new DateTime(2020,4,1)}; var result = validator.TestValidate(item); result.ShouldHaveValidationErrorFor(x => x.ClientId); } [TestMethod] public void Validate_ClientId_Is_LessThanZero() { var item = new Item {ClientId = -1, OrgUid = 123456, CheckDate = new DateTime(2020, 4, 1) }; var result = validator.TestValidate(item); result.ShouldHaveValidationErrorFor(x => x.ClientId); } [TestMethod] public void Validate_OrgUid_is_Null() { var item = new Item { ClientId = 12345, CheckDate = new DateTime(2020, 4, 1) }; var result = validator.TestValidate(item); result.ShouldHaveValidationErrorFor(x => x.OrgUid); } [TestMethod] public void Validate_OrgUid_is_LessThanZero() { var item = new Item { ClientId = 12345, OrgUid = -1000, CheckDate = new DateTime(2020, 4, 1) }; var result = validator.TestValidate(item); result.ShouldHaveValidationErrorFor(x => x.OrgUid); } [TestMethod] public void Validate_CheckDate_is_InValid() { var item = new Item { ClientId = 12345, OrgUid = 321654987, CheckDate = default(DateTime) }; var result = validator.TestValidate(item); result.ShouldHaveValidationErrorFor(x => x.CheckDate); } }}
这是用于单元测试项目的packages.config:
<!--?xml version="1.0" encoding="utf-8"?--><packages> <package id="FluentValidation" targetframework="net48" version="9.5.1"> <package id="MSTest.TestAdapter" targetframework="net48" version="2.1.1"> <package id="MSTest.TestFramework" targetframework="net48" version="2.1.1"></package></package></package></packages>

单元测试可能是开发人员用来帮助防止代码错误逃逸到生产系统中的最有效工具之一。虽然这不是单元测试的明确方法,但这应该能够帮助在流行的数据验证库上设置单元测试。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删