Ben Controller.ViewData.ModelState
nasıl test edebilirim? Ben herhangi bir mock framework olmadan yapmayı tercih ederim.ModelState'i nasıl test edebilirim?
cevap
Sen elbette verileriniz için Depo Desen kullanıyorsanız bir Mock kullanmak zorunda değilsiniz.
Bazı örnekler: http://www.singingeels.com/Articles/Test_Driven_Development_with_ASPNET_MVC.aspx
// Test for required "FirstName".
controller.ViewData.ModelState.Clear();
newCustomer = new Customer
{
FirstName = "",
LastName = "Smith",
Zip = "34275",
};
controller.Create(newCustomer);
// Make sure that our validation found the error!
Assert.IsTrue(controller.ViewData.ModelState.Count == 1,
"FirstName must be required.");
Sanal değiştirici, güzel olurdu. –
IMHO iyi çözüm mvc konveyör kullanmaktır. Bu şekilde, kontrol cihazınızın daha gerçekçi davranışlarını elde edersiniz, model geçerliliğini kadere teslim etmelisiniz - öznitelik doğrulamaları. Aşağıdaki yazıyı açıklıyor (http://stackoverflow.com/a/5580363/572612). –
//[Required]
//public string Name { get; set; }
//[Required]
//public string Description { get; set; }
ProductModelEdit model = new ProductModelEdit() ;
//Init ModelState
var modelBinder = new ModelBindingContext()
{
ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(
() => model, model.GetType()),
ValueProvider=new NameValueCollectionValueProvider(
new NameValueCollection(), CultureInfo.InvariantCulture)
};
var binder=new DefaultModelBinder().BindModel(
new ControllerContext(),modelBinder);
ProductController.ModelState.Clear();
ProductController.ModelState.Merge(modelBinder.ModelState);
ViewResult result = (ViewResult)ProductController.CreateProduct(null,model);
Assert.IsTrue(result.ViewData.ModelState["Name"].Errors.Count > 0);
Assert.True(result.ViewData.ModelState["Description"].Errors.Count > 0);
Assert.True(!result.ViewData.ModelState.IsValid);
Bu yöntemi gerçekten seviyorum. Siz de belirttiğiniz gibi, doğrulama niteliklerine sahip bir modelin düzgün bir şekilde test edilmesi çok daha iyidir. – stevethethread
Bu harika! – Ian1971
Çok kullanışlıdır. Ben genelde bu çerçevenin bir parçası olarak, modeliniz özelliklerini test edilmemesi gerektiğini söylüyor millet ile anlaşmak düşünüyorum, ama bu sizin kontrolör kritik hataları yakalıyor gelecekteki tüm süre onaylamak için kritik olduğunda zamanlar vardır. –
yukarıdaki harika cevaplara ekleme, Kontrolör sınıfı içinde korunan TryValidateModel yönteminin bu fantastik kullanımını göz atın.
Basitçe denetleyici devralmasını bir test sınıfı oluşturmak ve TryValidateModel yöntemine modelinizi geçmektedir. İşte bu bağlantı: http://blog.icanmakethiswork.io/2013/03/unit-testing-modelstate.html
Bu çözüm için tam kredi John Reilly ve Marc Talary'e gider. Test Web API için
burada yerine bir blog yayınına kapalı bağlayan daha çözümünü de ekleyiniz – csharpsql
Kişisel link uzantısı yöntemi ' public void BindModelToController
, denetleyici üzerinde Validate yöntemi kullanın:
var controller = new MyController();
controller.Configuration = new HttpConfiguration();
var model = new MyModel();
controller.Validate(model);
var result = controller.MyMethod(model);
- 1. STDERR'i Test :: More ile nasıl test edebilirim?
- 2. Django URL'lerini nasıl test edebilirim?
- 3. SSIS paketlerimi nasıl test edebilirim?
- 4. MVC Görünümlerini nasıl test edebilirim?
- 5. CanCan'ı konsolda nasıl test edebilirim?
- 6. Fonksiyon çağrılmadığında nasıl test edebilirim?
- 7. Rspec: Yinelemeyi nasıl test edebilirim?
- 8. Geçersiz yöntemleri nasıl test edebilirim?
- 9. FluentMigrator geçişlerimi nasıl test edebilirim?
- 10. Xcode Project'i iPhone'da nasıl test edebilirim?
- 11. Django'da boş bir sorgulamayı nasıl test edebilirim?
- 12. Perl'de engellemeden STDIN'i nasıl test edebilirim?
- 13. Salatalıktaki authlogic'in current_user öğesini nasıl test edebilirim?
- 14. Modern sistemdeki arabellek taşmalarını nasıl test edebilirim?
- 15. Stdin ve stdout'u nasıl test edebilirim?
- 16. CSS seçicilerini JavaScript’te nasıl test edebilirim?
- 17. Android Emulator'da çoklu dokunmayı nasıl test edebilirim?
- 18. Laravel olaylarını nasıl düzgün şekilde test edebilirim?
- 19. DelayedJob'u Salatalık ile nasıl test edebilirim?
- 20. Matrisin köşegen olup olmadığını nasıl test edebilirim?
- 21. Sınama işlemini nasıl test edebilirim: RSpec
- 22. Dart'ta bir fonksiyonun varlığını nasıl test edebilirim?
- 23. RSpec'i kullanarak ActionCable kanallarını nasıl test edebilirim?
- 24. Olayları açısal olarak nasıl test edebilirim?
- 25. Güçlü paramları Rspec ile nasıl test edebilirim?
- 26. Paketim için setup.py'yi nasıl test edebilirim?
- 27. Rails eklentisindeki görünümleri nasıl test edebilirim?
- 28. Mongoid'in üreteceği sorgu türünü nasıl test edebilirim?
- 29. Bir Rails 3 uygulamasının test paketini nasıl test edebilirim?
- 30. TDD - zamana dayalı işlevselliği test içinde uygulamadan nasıl test edebilirim?
daha spesifik olun. Ne için test etmeye çalışıyorsun? Bana ağır bir önemsememek görünen bir düzenleme vergisi, orada ne yazık ki Hataları'nı – skb