2

IValidatableObjectを使用していくつかのEntityFrameworkオブジェクトのカスタム検証を作成し、検証のためにいくつかのDataAnnotationsをオブジェクトに追加しました。

検証が必要な検証を満たしていることをテストしたかったのですが(カスタム検証が機能し、加えられた変更がそれらのデータ注釈などを保持していることを確認します...)、呼び出しなしで単体テストで検証を実行する方法を決定できませんSaveChanges(問題があり、検証が機能しないかのように実行したくない場合は、データソースに書き込みます)

私はこのようなことをしたかった:

[TestMethod]
public void InvalidStartDate_StartDateAfterEndDate()
{
   var header = new Header()
                    {
                        StartDate = DateTime.Now.AddDays(15),
                        EndDate = DateTime.Now.AddDays(-15)
                    };
   var actual = header.IsValid();
   var expected = false;
   Assert.AreEqual(expected, actual);
}

またはのようなもの

[TestMethod]
public void InvalidStartDate_StartDateAfterEndDate()
{
   var header = new Header()
                    {
                        StartDate = DateTime.Now.AddDays(15),
                        EndDate = DateTime.Now.AddDays(-15)
                    };
   var actual = header.GetValidationErrors().Count;
   var expected = 0;
   Assert.AreEqual(expected, actual);
}

しかし、保存変更を呼び出さずに検証を実行する方法を見つけることができないようですが、これを行う方法はありますか?

4

1 に答える 1

5

バリデーターを呼び出して、オブジェクトを検証できます。

[TestMethod]
public void InvalidStartDate_StartDateAfterEndDate()
{
   var header = new Header()
                    {
                        StartDate = DateTime.Now.AddDays(15),
                        EndDate = DateTime.Now.AddDays(-15)
                    };

   var context = new ValidationContext(header, null, null);
   var results = new List<ValidationResult>();

   var actual = Validator.TryValidateObject(header, context, results);
   var expected = false;

   Assert.AreEqual(expected, actual);
}
于 2012-07-17T00:50:29.803 に答える