Comment puis-je tester Controller.ViewData.ModelState
? Je préférerais le faire sans faux cadre.Comment puis-je tester ModelState?
Répondre
Vous n'avez pas besoin d'utiliser un Mock si vous utilisez le Pattern du Repository pour vos données, bien sûr.
Quelques exemples: 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.");
Un modificateur virtuel sur les erreurs serait bien, hélas il y a une taxe d'arrangement, qui me semble un peu lourde. –
IMHO Une meilleure solution consiste à utiliser un convoyeur mvc. De cette façon, vous obtenez un comportement plus réaliste de votre contrôleur, vous devez fournir la validation du modèle à son destin - validation des attributs. Ci-dessous le poste décrit cela (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);
J'aime vraiment cette méthode. Comme vous le dites, il est préférable de tester correctement un modèle qui a été décoré avec des attributs de validation. – stevethethread
C'est génial! – Ian1971
Très pratique. Je pense que je suis généralement d'accord avec les gens qui disent que vous ne devriez pas tester les propriétés de votre modèle, car cela fait partie du cadre, mais il est parfois crucial de confirmer que votre contrôleur détectera des erreurs critiques. –
Ajout aux grandes réponses ci-dessus, consultez cette utilisation fantastique de la méthode TryValidateModel protégée dans la classe de contrôleur.
Créez simplement une classe de test héritant du contrôleur et passez votre modèle à la méthode TryValidateModel. Voici le lien: http://blog.icanmakethiswork.io/2013/03/unit-testing-modelstate.html
Le mérite en revient à John Reilly et Marc Talary pour cette solution.
S'il vous plaît inclure la solution ici plutôt que de lier au large à un blog – csharpsql
Votre lien est mort. –
Pour les tests API Web, utilisez la méthode Validate sur le contrôleur:
var controller = new MyController();
controller.Configuration = new HttpConfiguration();
var model = new MyModel();
controller.Validate(model);
var result = controller.MyMethod(model);
- 1. Problème RenderAction et ModelState
- 2. Contrôleur ModelState avec ModelStateWrappper
- 3. ModelState sans champ?
- 4. Modelstate avec Ajax Form
- 5. Validation du formulaire avec ModelState
- 6. Comment tester unit IDataErrorInfo?
- 7. Comment tester QueryString
- 8. Comment tester un déploiement
- 9. Comment tester un BuildProvider
- 10. Comment tester une application?
- 11. Simple Captcha - Comment tester?
- 12. Comment tester String = Enum.Value?
- 13. Les exceptions MVC dans ModelState ne sont pas interceptées
- 14. Retour d'une liste de clés avec des erreurs ModelState
- 15. Comment tester pour parfois échoue?
- 16. Comment tester un analyseur CSS?
- 17. Comment tester le code C
- 18. Comment faire tester vos clients
- 19. Comment tester les cours anonymes?
- 20. Comment tester une installation AJAX
- 21. Comment tester unitairement cette méthode?
- 22. Comment tester Netbeans 6.7 Plugin?
- 23. Comment tester un formulaire Web?
- 24. Comment tester les touches Ctrl?
- 25. Comment tester un fuseau horaire?
- 26. Comment tester NHibernate FetchMode.Eager correctement?
- 27. Comment puis-je accéder à ModelState à partir d'un filtre ActionFilter?
- 28. Comment faire pour tester l'application pour Vista
- 29. Comment tester la vue matérialisée dans Java
- 30. Comment tester les événements du clavier jQuery?
être plus précis. Qu'est-ce que vous essayez de le tester? – skb