ModelValidation.Test
v.1.0.0
小框架检查模型是否正确验证。
我对于TDD (测试驱动的开发)模型开发方法也很有用。
它几乎可以使用任何测试框架!
从Nuget安装:https://www.nuget.org/packages/modelvalidation.test
C#查询示例:
[ YoungSkywalker ] // Surname == Skywalker && Age < 25
public class Rebel
{
[ Required ]
[ MaxLength ( 10 ) ]
public string Name { get ; set ; }
[ Required ]
public string Surname { get ; set ; }
[ Range ( 10 , 900 ) ]
public int Age { get ; set ; }
[ RebelWeapon ] // Color == "Green"
public Weapon Weapon { get ; set ; }
}
public class Weapon
{
public string Color { get ; set ; }
}
[ Fact ]
public void Test_Luke ( )
{
ModelValidator . Test (
( ) => new Rebel
{
Name = "Luke" ,
Surname = "Skywalker" ,
Age = 18 ,
Weapon = new Weapon
{
Color = "Green"
}
} ,
modelSetup =>
{
modelSetup . CheckClass ( os => os . IsInvalidWith ( r => r . Surname , "Organa" ) ) ;
modelSetup . CheckClass ( os => os . IsInvalidWith ( r => r . Age , 42 ) ) ;
modelSetup . CheckProperty ( r => r . Name , ps => ps . IsInvalidWith ( null ) . IsInvalidWith ( "Lukelongname" ) ) ;
modelSetup . CheckProperty ( r => r . Surname , ps => ps . IsInvalidWith ( null ) ) ;
modelSetup . CheckProperty ( r => r . Age , ps => ps . IsInvalidWith ( 901 ) . IsInvalidWith ( 9 ) ) ;
modelSetup . CheckProperty ( r => r . Weapon , ps => ps . IsInvalidWithTransform ( w =>
{
w . Color = "Red" ;
return w ;
} ) ) ;
} ) ;
}
// Test that validation attributes return the correct message
[ Fact ]
public void Test_Stormtrooper ( )
{
ModelValidator . Test (
( ) => new Stormtrooper
{
IsCloned = true ,
Leader = "Palpatine"
} ,
modelSetup =>
{
modelSetup . CheckObject ( os => os . IsInvalidWith ( r => r . IsCloned , false ) , "Trooper must be a clone." ) ;
modelSetup . CheckProperty ( r => r . Leader , ps => ps . IsInvalidWith ( null , "Sith leader is required." ) ) ;
} ) ;
} 有一些内置的扩展方法可以帮助编写属性测试更快:
ps.IsRequired()ps.HasMaxLenght(int)ps.HasMinLenght(int)ps.HasMinValue(int)ps.HasMaxValue(int)ps.InRange(int, int)ps.HasMinValue(double)ps.HasMaxValue(double)ps.InRange(double, double) // Example
[ Fact ]
ModelValidator . Test (
( ) => new Stormtrooper
{
IsCloned = true ,
Leader = "Palpatine"
} ,
modelSetup =>
{
modelSetup . CheckProperty ( r => r . Leader , ps => ps . IsRequired ( ) ) ;
} ) ; Test方法接受选项对象为第三参数。