许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  单元测试Fluent验证:确保代码正确性

单元测试Fluent验证:确保代码正确性

阅读数 1
点赞 0
article_banner

介绍

数据验证在大多数应用程序中都很常见。Fluent Validations是执行数据验证数据输入的一种非常流行的方式。

这是关于如何对这些验证进行单元测试以确保它们执行预期验证的技巧。

背景

本技巧假设您对设置控制台应用程序和单元测试项目有基本的了解。

这是该FluentValidation页面的链接,可获取有关其库的更多信息和文档。

这是整个项目代码的GitHub链接。

单元测试有很多不同的测试运行器,这个技巧使用MS Test作为测试运行器,如果你使用XUnit或NUnit或其他一些单元测试运行器,语法可能会有所不同。

使用代码

这是一个基本的.NET Framework 4.8控制台应用程序,用于设置程序代码。

该程序执行以下基本步骤:

  • 创建一个新Item对象并设置该对象的属性。
  • 创建ItemValidator类的实例以验证object实例上的属性。
  • 验证Item对象实例上的值。
  • 检查结果并报告错误。

item验证类继承自FluentValidations AbstractValidator基类:

  • 继承的类为Item类的每个属性创建规则。
  • 大多数验证规则都是Fluent Validation开箱即用的。
  • 验证日期值有一个自定义验证。


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>

兴趣点

单元测试可能是开发人员用来帮助防止代码错误逃逸到生产系统中的最有效工具之一。虽然这不是单元测试的明确方法,但这应该能够帮助在流行的数据验证库上设置单元测试。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删




相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空