Validator.TryValidateObject を使用して MVC モデルを検証しようとしています。これは本番モードでは機能しますが、単体テスト コードでは機能しません。Validator.TryValidateObject は常に true を返します。
コード部分:
コントローラー コンストラクターで、モデルを挿入します。
private IEmailModel model;
public JoggenController(IEmailModel m)
{
this.model = m;
}
アクション メソッドでモデルを検証し、本番モードで正常に動作し、isValid は true または false です。
public ViewResult AddEmail(String email)
{
model.Email = email;
var context = new ValidationContext(model, null, null);
var list = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(model, context, list, true);
//...
AddEmail() をテストし、次のテストコードを使用します。
var emailModel = new Mock<IEmailModel>();
emailModel
.Setup(p => p.Email)
.Returns("xxx");
var controller = new Controller(emailModel.Object);
//should Faking ModelState.IsValid = false
controller.ModelState.Add("testError", new ModelState());
controller.ModelState.AddModelError("testError", "test");
var result = controller.AddEmail("xxx") as ViewResult;
//...
テストコードをデバッグすると、var isValid = Validator.TryValidateObject は常に true を返します。どうしたの?
ありがとう