2009-10-02 9 views
2

J'ai un contrôleur qui fonctionne sur mon site mais qui échoue lors des tests unitaires. C'est assez simple et dépend de Linq to Sql pour retourner une collection d'objets JSON.Test de l'unité MVC avec Linq to Sql

Le test échoue car le DataContext ne peut pas trouver la chaîne de connexion lorsqu'il est appelé depuis l'extérieur du projet MVC.

J'ai eu un coup d'oeil dans le code généré automatiquement:

public DC(): 
      base(global::System.Configuration.ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString, mappingSource) 
    { 
     OnCreated(); 
    } 

Le projet Web peut trouver l'entrée « myConnectionString » dans web.config, mais le projet de test ne peut pas le trouver. Le message d'erreur que je suis arrivé était:

Test method MyMVCApp.Controllers.HomeControllerTest.IndexShouldReturnIssues threw exception: System.NullReferenceException: Object reference not set to an instance of an object.. 

Je ne veux pas passer une autre chaîne de connexion de mes tests unitaires parce que je veux vérifier que la chaîne de connexion dans le web.config fonctionne.

Merci, John

+0

Regardez cette réponse pour voir comment tester efficacement et avec succès avec LINQ to SQL: http://stackoverflow.com/questions/4128640/how-to-remove-unit-of-work-functionality-from-repositories- using-ioc/4132186 # 4132186 – Steven

Répondre

1

Ajouter la chaîne de connexion au fichier app.config dans votre projet de test unitaire. FWIW, je n'utilise pas réellement de base de données dans mes tests unitaires (bien que je fasse des tests d'intégration). J'ai écrit à propos d'un LINQ-to-SQL implementation qui permet de se moquer de mon blog un certain temps si vous êtes intéressé par plus d'informations.

+0

Je suppose que cela fonctionnerait, mais je veux vraiment tester que la chaîne de connexion dans mon projet Web fonctionne, donc je suppose que vous pourriez appeler cela un test d'intégration. Je ne voudrais pas avoir une situation où la chaîne de connexion est correcte dans le test mais mauvaise dans le site. –