1

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 を返します。どうしたの?

ありがとう

4

0 に答える 0