2009-08-13 7 views
12

Je cherchais d'autres moyens de tester les applications ASP.NET MVC et j'ai rencontré le MvcIntegrationTestFramework de Steve Sanderson. L'approche semble plutôt prometteuse mais je me demandais si quelqu'un avait une expérience à partager.Est-ce que quelqu'un a utilisé MvcIntegrationTestFramework de Steve Sanderson?

+0

Je ne l'ai pas encore utilisé mais l'idée de découpler le navigateur du test d'intégration est très attrayante. –

+0

Mais pour moi l'intégration implique l'intégration des couches. Et le navigateur (en particulier javascript et ajax) est, en effet, une couche qui devrait être testée. –

+0

Bonjour James. Cela doit certainement être fait, mais dans mon expérience, il est difficile d'automatiser et en raison des différences de navigateur, vous devez le faire pour un certain nombre d'entre eux. Donc, ce n'est pas un remplacement, mais un ajout à des tests dans le navigateur. Et utile pour trouver des régressions. – Maurice

Répondre

7

Je reçois de très bons résultats. Je ne me soucie pas de ce que quelqu'un d'autre ici dit de la nécessité de tester des vues, dès que vous ajoutez votre première ligne de code à une vue, même si le code est strictement lié à la présentation, vous introduisez un potentiel d'erreurs ce serait une bonne idée d'écrire des tests automatisés. Mon principal intérêt est juste d'attraper autant d'exceptions/d'erreurs d'écran blanc et d'écran jaune que possible. Pour ce faire, je l'ai utilisé l'extrait de blog introduction de Steven pour faire en sorte que la page rendue correctement sans jeter des exceptions:

Assert.IsTrue(result.ResponseText.Contains("<!DOCTYPE html")); 

Les petits pièges que je vois avec ce cadre pourrait être:

  • Si votre site Web effectue une liaison de modèle assez complexe entre les vues et les méthodes d'action, vous pourriez créer de très grandes NameValueCollections comme dans cet exemple (une méthode d'action qui prend en fait un objet modèle LogonModel view). Ne voyez aucun moyen de transmettre des types d'objet de modèle de vue complexes dans vos méthodes d'action en utilisant cette structure:

var result = browsingSession.ProcessRequest("/account/logon", HttpVerbs.Post, new NameValueCollection { {"UserName","myName"}, {"Password", "myPassword"}, {"returnUrl", "/home/myActionMethod"} });

  • exécution browsingSession.ProcessRequest ("url") crée un hôte/contexte d'application qui exécute en fait le code Web que vous testez en utilisant la configuration dans le projet que vous testez. Cela signifie que les tests sont un peu lents et qu'ils pourraient éventuellement modifier des données réelles, car je ne vois pas de moyen simple et rapide d'échanger vos référentiels d'accès aux données dans votre projet Web testé avec de fausses versions en utilisant cadre de test. En d'autres termes, vous devrez probablement utiliser les moyens web.config.
+0

Suivi - Je recommande fortement de passer à MVC3 et d'utiliser RazorGenerator. Vous pouvez exécuter MVC2 et MVC3 simultanément, en migrant des pages Web uniques à la fois, ce que j'ai trouvé fonctionner de manière transparente. Bien que la structure de Steve Sanderson fonctionne bien dans les limites de MVC2, nous avons trouvé extrêmement difficile de gérer les changements aux chemins de fichiers codés en dur qui étaient nécessaires lors de l'utilisation du framework de test sur nos machines dev ou sur notre CI. serveur. Ce problème est inexistant avec RazorGenerator + MVC3. –

+1

Merci pour le suivi! Pouvez-vous expliquer en quelques mots comment RazorGenerator vous a aidé à remplacer MvcIntegrationTestFramework pour vos tests d'intégration? Comment la précompilation de vos vues Razor aide-t-elle? Peut-être que vous avez blogué à ce sujet :-) – Oliver

0

Je n'ai pas utilisé ce cadre. Mais basé sur mon expérience de lecture de son livre - Pro ASP.NET MVC Framework, et un autre cadre de validation xVal il a développé, je dirais "IL EST GRAND".

+0

J'aime vraiment son livre aussi. En fait, j'ai une copie à côté de moi en ce moment. – Maurice

0

Expérimenté avec un peu et il pourrait être très utile dans certaines situations. Le général se lève et si j'y voyais d'autres travaux, je l'utiliserais pour un projet futur.

N'a pas procédé comme déjà WatIn configuration et en prenant soin de certaines choses que je ne voudrais pas aborder à nouveau dans ce cadre. Par exemple. authentification via une boîte de dialogue, ce qui nécessiterait probablement un changement de code.

1

Après avoir lu ardave's answer il y a un certain temps, nous sommes allés en fait de l'essayer pour nous-mêmes pour notre nouvelle application Orchard Marinas.info. Tout d'abord, je recommande à quiconque de commencer à partir d'une fourche de this version car il est encore plus facile à configurer que l'original.

Pour toute application MVC3 "normale", cela fonctionne simplement. Malheureusement, avec Orchard, il n'a pas bien joué, du moins pas avec une version non modifiée de leur Global.asax.cs. Nous avons donc continué à descendre le browser based testing road mais nous continuons à l'utiliser pour exécuter les commandes Orchard dans l'application qui est assez rapide.

Questions connexes