2012-08-03 25 views
0

我正在使用DataAnnotations和ASP.NET MVC3構建項目。我們使用此解決方案來測試「Date Annotions」的驗證:http://gcbyjm.blogspot.com.br/2011/02/how-to-unit-test-dataannotations.html使用ASP.NET MVC 3 +數據註解和屬性進行單元測試DateTime

我有問題來測試「ViewModel」屬性「DateTime」。

public class AchievementVM 
{ 
    ... 

    [Required(ErrorMessage = "The date field is required.")] 
    [DataType(DataType.DateTime, ErrorMessage = "Invalid date.")] 
    public DateTime Date { get; set; } 

    ... 
} 

    [TestMethod] 
    public void AchievementVMValidator_ShouldHaveErrorWhenDateIsInvalid() 
    { 
     // Arrange 
     var achievementVM = new AchievementVM() { Date = ???? }; 

     // Act 
     var errors = ValidationBuddy.GetErrors(achievementVM) as List<ErrorInfo>; 

     // Assert 
     ErrorInfo error = errors.Find(delegate(ErrorInfo e) { return e.ErrorMessage == "The date field is required."; }); 
     Assert.IsTrue(error != null); 
    } 

我的問題是如何傳遞此屬性的值來模擬ModelBind錯誤。在這兩種情況下,文本框都是空的和無效的數據。

非常感謝!

回答

0

如果我正確理解你的問題,我認爲你應該測試被視圖所在的字段所在的視圖調用的動作方法。像那樣,您可以將無效或空值傳遞給複製空值或無效值的操作方法。

0

請記住,您的視圖模型應該是您視圖的表示形式。所以如果你的觀點允許一個日期時間到不被輸入(空白文本框),那麼我認爲你的視圖模型應該有一個可爲空的DateTime。

public DateTime? MyProperty { get; set; } 

這樣,在您的單元測試中,您可以測試一個空的DateTime。

在您的域模型上,這應該是不同的,因爲您不希望數據庫接收空的DateTime,因此域模型屬性不應爲空。您的視圖模型驗證應該停止傳遞給域模型的空日期或將其轉換爲域模型可以處理的日期時間。例如,如果您的業務需求與此匹配,則可能會將空DateTime轉換爲DateTime.Now。

我希望這會有所幫助。

相關問題