簡體   English   中英

使用ASP.NET MVC 3 +數據注釋和屬性DateTime進行單元測試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM