2013-07-18 49 views
2

我已經寫了一個ValidationRules的小型庫,並且要確保它通過了大量的綜合測試。我想單元測試它們,但我不確定如何單元測試驗證規則。我認爲這與測試任何其他方法類似,但有一些事情我不確定。單元測試驗證規則

例如,我的一些驗證規則具有用於通過XAML傳遞參數的屬性。我不想冒險做這件事,因爲很多人都會添加驗證器並且建立在我的單元測試套件上。

<utils:RestrictInputTypeValidator Restriction="IntegersOnly" ValidatesOnTargetUpdated="True"/>在此示例中,「限制」是驗證規則「RestrictInputTypeValidator」的屬性。

我還沒有找到任何有關單元測試驗證的好資源,並且很想看看最佳實踐的一些示例。

+1

什麼是單元測試此或任何其他類別的區別? – Alan

+0

這些方法是通過綁定觸發的,而不是簡單的「調用」。你以屬性的形式傳遞參數的方式等等。我並不是說它不能像測試任何其他類一樣以一種黑客的方式來完成。我的問題是,我認爲它有不同的最佳做法。 –

回答

5

在XAML中使用的每個驗證從ValidationRule類具有以下Validate超載得出:

ValidationResult Validate(object value, CultureInfo cultureInfo) 

你可以簡單地調用這個方法在你的單元測試,並檢查返回ValidationResult對象,其中包含一個IsValid屬性,指示傳遞的值是否有效。

由於這是一個像任何其他類,你可以簡單地通過在單元測試所需的性能和往常一樣:

var validator = new RestrictInputTypeValidator() 
validator.Restriction = MyRestrictionEnum.IntegersOnly; 

// Here for example our input is invalid. 
var result = validator.Validate("My Input", MyCulture); 
Assert.IsFalse(result.IsValid); 
+0

那些基本上用作參數的屬性呢? –

+0

查看我的更新回答。 –