2013-06-10 1 views
-1

Je veux tester le code suivant. Maintenant j'utilise NUnit avec Rhino Mock.Comment simuler non implémenté Injection de dépendance?

Note: Tous les cas de tests NUnit ne devraient pas faire une opération de base de données

interface IdbOperation 
{ 
     int insert(); 
} 

public class databaseactivity:IdbOperation 
{ 
    public databaseactivity() 
    { 
     verifyDBConnection(); 
    } 

    void verifyDBConnection() 
    { 
     DbManager dbManager=new DbManager(); 

     if(dbManager.state()!=True) 
     { 
     Throw new DatabaseException(); 
     } 
    } 

    public int insert(bo obj) 
    { 
     Serviceclient serviceClient=new Serviceclient(); 
     serviceClient.insert(obj); 
    } 
} 

Dans le code ci-dessus, je veux écrire un test unitaire pour insérer method.i essayé beaucoup de chemin mais pas en mesure de se moquer.so pourrait s'il vous plaît quelqu'un m'aider pour moquer insert method.ASAP

Vous pouvez me suggérer n'importe quel autre cadre moqueur aussi.

+3

Les tests unitaires avec des mocks ne fonctionneront pas sans injection de dépendance. C'est la vie. – sq33G

+0

Mille fois ça. Vous devez refactoriser votre code pour que ces classes concrètes ne soient pas instanciées dans les méthodes. Ne pouvait pas +1 @ sq33G commentaire assez rapide. –

+0

Merci, je suis d'accord avec vos préoccupations, j'ai discuté avec le client, mais ils ne sont pas prêts à changer le code existant .. c'est pourquoi je suis venu ici pour trouver un itinéraire alternatif .. Est-ce que microsoft? – manikandan

Répondre

0

Que pensez-vous de cela?

public databaseactivity(IDbManager dbManager = null) 
{ 
    DbManager dbManager = dbManager ?? new DbManager(); 
    // ... 
} 

Si vous devez recréer les instances (comme cela semble être le cas avec le ServiceclientFactory), vous avez besoin d'injecter une usine (je voudrais essayer d'éviter cela, parce que cela rend les choses plus compliquées):

public databaseactivity(ServiceclientFactory serviceClientFactory = null, /*...*/) 
{ 
    // ... 
    this.serviceClientFactory = serviceClientFactory ?? new DefaultServiceClientFactory(); 
} 

public int insert(bo obj) 
{ 
    serviceClient = this.serviceClientFactory.CreateServiceClient(); 
    serviceClient.insert(obj); 
} 
+0

Je me demande comment vous pouvez bénéficier des tests unitaires lorsque le code ne peut pas changer. Pourquoi vous souciez-vous des erreurs existantes, quand vous ne pouvez pas les réparer? Vous ne pouvez même plus rien casser quand vous ne pouvez pas changer le code. –

+0

microsoft microsoft se moquera-t-il du code sans implémenter DI? – manikandan