5

Đầu tiên; Tôi biết rằng tôi không cần phải kiểm tra nội bộ của MVC nhưng tôi thực sự cần một bộ một bài kiểm tra xung quanh dữ liệu chảy vào hệ thống của chúng tôi.Kiểm tra mô hình ràng buộc trong ASP.NET MVC 2

Làm thế nào tôi có thể, tôi hy vọng không có chế nhạo tất cả ngữ cảnh HTTP, kiểm tra đối tượngA (bộ sưu tập biểu mẫu, dict, bộ sưu tập, đối tượng, vv) có hay không phù hợp với objectAModel?

Tôi muốn không phải nhanh chóng điều khiển hoặc gọi hành động. Tôi chỉ đơn giản muốn kiểm tra xem đối tượng mới của tôi có làm mất hiệu lực mô hình hay không.

Tôi ước gì tôi chỉ đơn giản là có thể viết

var modelState = new ModelBindingContext<objectAModel>().validate(objectA); 
+0

Sau đó tôi có thể thử nghiệm như sau: Assert.isTrue (new ModelBindingContext (). Validate (objectA)); – detroitpro

Trả lời

2

Brad Wilson có excellent post on DataAnnotations


Tại sao tôi phải thử nghiệm nó?

Sử dụng DataAnnotations thuộc tính cho các mô hình của bạn di chuyển xác nhận ra các hành động điều khiển và vào các chất kết dính mô hình, có nghĩa là kiểm tra đơn vị của bạn cho những hành động điều khiển của bạn sẽ được đơn giản hóa.

Khi bạn đang viết bài kiểm tra cho điều này, bạn cần phải xác minh ba điều:

  1. Sản phẩm DataAnnotationsModelBinder đăng ký như các chất kết dính mặc định? Bạn sẽ chỉ làm điều này một lần cho toàn bộ ứng dụng, giống như tuyến đường các bài kiểm tra bạn sẽ viết.
  2. Mô hình của tôi có được trang trí đúng cách với thuộc tính DataAnnotations không? Bạn sẽ kết thúc viết các bài kiểm tra cho từng thuộc tính xác thực mà bạn thêm vào mô hình của mình.
  3. Phương pháp hành động của tôi có phản ứng đúng cách khi trạng thái của mô hình không hợp lệ không? Bạn chỉ cần viết phương thức một lần cho mỗi hành động này.
+0

Điều này sẽ chỉ kiểm tra mô hình được trang trí với các thuộc tính chính xác. – detroitpro

0

Rất đơn giản, bạn có thể thực hiện một phương pháp mà kéo ModelMetadata cho loại hình của mô hình của bạn, nhận được ModelValidator, và xác nhận đối tượng mô hình.

public bool IsModelValid<T>(T model) where T : class 
{ 
    var metaData = ModelMetadataProviders.Current.GetMetadataForType(() => model, typeof(T)); 
    var validator = ModelValidator.GetModelValidator(metaData, new ControllerContext()); 
    var validationResults = validator.Validate(model); 
    return 0 == validationResults.Count(); 
} 

Bằng cách "đơn giản", tôi có nghĩa là điều này không nhất thiết phải xem xét tất cả các cấu hình có thể, nhưng bạn có thể kiểm tra cơ bản về hiệu lực của mô hình.