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方法接受選項對象為第三參數。