[英]Unit Testing with ASP.NET MVC 3 + Data Annotations and property DateTime
我正在使用DataAnnotations和ASP.NET MVC3的項目。 我們使用此解決方案來測試“日期注釋”的驗證: http ://gcbyjm.blogspot.com.br/2011/02/how-to-unit-test-dataannotations.html
我在測試“ 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 ERROR。 在兩種情況下,文本框均為空且數據無效。
非常感謝!
如果我正確理解了您的問題,我認為您應該測試該字段所在的視圖調用的操作方法。 這樣,您可以將無效或空值傳遞給復制空或無效值的操作方法。
請記住,您的視圖模型應代表您的視圖。 因此,如果您的視圖允許不輸入 DateTime(空文本框),那么我認為您的視圖模型應具有可為空的DateTime。
public DateTime? MyProperty { get; set; }
這樣,在單元測試中,您可以測試空的DateTime。
在您的域模型上,這應該有所不同,因為您不希望數據庫接收到空的DateTime,因此域模型屬性不應為空。 您的視圖模型驗證應停止將空日期傳遞給域模型,或者將其轉換為域模型可以處理的DateTime。 例如,也許您將空的DateTime轉換為DateTime。現在,如果您的業務需求與此匹配。
我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.