2009-09-22 5 views
3

Comment puis-je initialiser correctement un automate ASP.NET MVC pour un test d'intégration?Contrôleurs ASP.NET MVC correctement initialisés lors des tests

Mon problème actuel est que lorsque je tente d'accéder au membre de l'utilisateur d'un contrôleur que je reçois:

System.NotImplementedException: La méthode ou l'opération ne sont pas mises en œuvre.

Ce que je veux, c'est ce que Ruby on Rails offre dès la sortie de la boîte avec les tests fonctionnels.

+0

Merci pour les commentaires sur l'exécution d'un serveur Web entier. Je vais garder cela comme une dernière ressource car cela complique beaucoup tout (elle n'utilisera pas ma base de test, je devrai faire face à HTTP au lieu de simplement créer un contrôleur et appeler des méthodes, je vais devoir réparer un port qui est bon pour tout le monde, etc). Il devrait y avoir un meilleur moyen avec ASP.NET MVC. – Pablo

Répondre

0

Vous devez lancer une instance du serveur Web, que ce soit IIS ou le Visual Studio intégré. Le test unitaire dans Visual Studio n'initialise pas une instance du site par défaut.

+0

Comment lancer IIS ou Casini à partir d'un test? – Pablo

2

Pour Révolutionnez Cassini à partir d'un test unitaire

[TestMethod()] 

[HostType("ASP.NET")] 

[UrlToTest("http://localhost:25153/WebSite1")] 

More information on MSDN

Kindness,

Dan

2

Que diriez-vous d'avoir un coup d'oeil à ce de Steve Sanderson - MVCIntegrationTestFramework

Il semble assez freakin cool!

HTHS,
Charles

+0

Semble très proche de ce que je veux. Ai-je raison de supposer que le projet de démonstration est la seule chose téléchargeable qui soit offerte? Le cadre n'est offert nulle part ailleurs que dans la démo, à ce qu'il semble. – Pablo

+0

Un problème que je vois est qu'il utilisera n'importe quelle base de données configurée dans web.config, cela signifie qu'il utilisera normalement la base de données dev, au lieu de la base de données de test que je génère à la volée pour les tests. – Pablo

+0

Vous pourriez le coupler avec quelque chose comme ceci: http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx ...? – Charlino

0

Vous avez quelques choix:

  1. Mock HttpContextBase - il sont beaucoup d'articles sur le sujet
  2. Utiliser l'injection - passer IUserContext au contrôleur, et moquer dans les tests (dans la vraie application, il sera quelque chose HttpUserContext)
  3. Utiliser le modèle liant: http://www.hanselman.com/blog/IPrincipalUserModelBinderInASPNETMVCForEasierTesting.aspx

Et je suis sûr qu'il y en a plus, par exemple, faites votre BaseController et fausse GetUser() si nécessaire.

+0

Mais je ne veux pas me moquer de ceux-ci, car je veux m'assurer que mon application fonctionne bien avec le contexte réel, la vraie session, etc. – Pablo

+0

Ceci n'est pas un test unitaire, c'est un test d'intégration. – Pablo

+0

Désolé, raté ce mot. Ensuite, votre choix est l'une des options suggérées ici.MVCIntegrationTestFramework semble prometteur. Ce post semble expliquer la technique AppDomain un peu plus profond: http://www.lostechies.com/blogs/chad_myers/archive/2008/06/24/hosting-an-entire-asp-net-mvc-request-for-testing -purposes.aspx. – queen3

Questions connexes