TryValidateObject
dường như không hoạt động với thuộc tính xác thực mô hình Compare
khi kiểm tra đơn vị.Kiểm thử đơn vị Mvc.Compare Thuộc tính trả về mô hình không chính xác isValid = true
Tôi nhận được ModelState.IsValid = true
, khi tôi biết nó là false
(khi kiểm tra đơn vị).
Tôi đã có mô hình ví dụ này:
public class CompareTestModel
{
public string Password { get; set; }
[System.Web.Mvc.Compare(
"Password",
ErrorMessage = "The passwords do not match")]
public string PasswordCompare { get; set; }
}
Sử dụng phương pháp helper này để xác nhận mô hình khi kiểm tra đơn vị:
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
public static class ModelHelper
{
public static void ValidateModel(
this Controller controller,
object viewModel)
{
controller.ModelState.Clear();
var validationContext = new ValidationContext(viewModel, null, null);
var validationResults = new List<ValidationResult>();
Validator.TryValidateObject(
viewModel,
validationContext,
validationResults,
true);
foreach (var result in validationResults)
{
foreach (var name in result.MemberNames)
{
controller.ModelState.AddModelError(name, result.ErrorMessage);
}
}
}
}
Và tôi chạy thử nghiệm đơn vị này:
[Test]
public void CompareAttributeTest()
{
// arrange
var model = new CompareTestModel();
model.Password = "password";
model.PasswordCompare = "different password";
AccountController controller = new AccountController();
// act
controller.ValidateModel(model);
// assert
Assert.IsFalse(controller.ModelState.IsValid);
}