Genel yaklaşım, bir Mock ControllerContext oluşturmak, ModelBindingContext alay ve PropertyDescriptor alay ve sonra yöntemi çağırmaktır.
Model bağlayıcınız sizinki gibi görünen başka hizmetler kullanıyorsa (NHibernate kullanıyor musunuz?), O zaman bunları tasarlamak ve bunlara alay etmek zorundasınız.
// Arrange
ControllerContext mockControllerContext = ...;
ModelBindingContext mockModelBindingContext = ...;
PropertyDescriptor mockPropertyDescriptor = ...;
SomeService mockService = ...;
TaskFormBinder taskFormBinder = new TaskFormBinder();
taskFormBinder.Service = mockService;
// Act
taskFormBinder.BindProperty(
mockControllerContext, mockModelBindingContext, mockPropertyDescriptor);
// Assert
// ... here you need to inspect the values in the model binding context to see that it set the right properties
Ne sorunu (ler) birim testi yazma yaşıyorsanız:
birim test kodu şöyle bir şey olacaktır?
Ben ASP.Net MVC 2 modeli bağlayıcılar test etmek
Hanselman's MVC 1 example modifiye ettik
Cevabınız beni MVC kaynağında dolanmadan kurtardı. Aynı güncellemeyi yapmaya çalıştım ve neredeyse aynı sonuçla geldi. Ne yazık ki, 'ModelMetaData'' 'ModelBindingContext' üzerinde ayarlamıyordum. Bu olmadan, BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext) 'üzerinde bir NullReferenceException dizini alırsınız. – patridge
Bunun için teşekkürler. Benim için bazı şeyleri güzelce temizledi. –
Özel bir ValueProvider oluşturmak üzereydim, ama bahsettiğiniz NameValueCollectionValueProvider sayesinde. Bu yararlı oldu. Teşekkürler. – Mani