0

私は、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 をシミュレートする方法です。どちらの場合も、テキスト ボックスが空で、データが無効です。

どうもありがとう!

4

2 に答える 2

0

ビューモデルはビューの表現である必要があることに注意してください。したがって、ビューでDateTimeを入力できない場合(空のテキストボックス)、ビューモデルにはnull許容のDateTimeが必要だと思います。

public DateTime? MyProperty { get; set; }

そうすれば、単体テストでnullのDateTimeをテストできます。

ドメインモデルでは、データベースがnullのDateTimeを受け取らないようにするため、これは異なる必要があります。そのため、ドメインモデルのプロパティはnull可能であってはなりません。ビューモデルの検証では、nullの日付がドメインモデルに渡されるのを防ぐか、何かがドメインモデルが処理できるDateTimeに変換する必要があります。たとえば、nullのDateTimeがDateTimeに変換される可能性があります。これで、ビジネス要件がこれに一致する場合。

これがお役に立てば幸いです。

于 2013-01-15T01:36:13.090 に答える
0

私があなたの質問を正しく理解していれば、フィールドが配置されているビューによって呼び出されるアクション メソッドをテストする必要があると思います。そのように、空または無効な値をレプリケートするアクション メソッドに無効または空の値を渡すことができます。

于 2012-08-03T14:29:04.870 に答える