2009-08-23 5 views
1

J'ai la classe suivante en C# qui crée un objet à partir d'un .DLL propriétaire qui nécessite une licence dans un répertoire accessible à l'initialisation. "New Cplex()" peut échouer si le chemin système Windows est incorrect ou si le fichier de licence n'est pas correct. Je veux écrire un test pour affirmer si l'exception correcte est levée quand le chemin et/ou le fichier de licence est faux.Comment puis-je tester une exception qui n'est levée que lorsque le chemin d'accès du système est incorrect?

Comment écrire ce test sans modifier le chemin d'accès ou le fichier de licence?

Répondre

1

Que vérifiez-vous? Je crois que vous testez que le chemin de gestion des erreurs pour l'appel à new Cplex() est correct.

public CplexServices() 
{ 
    try 
    { 
     _cplex = new Cplex(); 
    } 
    catch 
    { 
     throw new Exception("Path or license file is wrong"); 
    } 
} 

Vous n'êtes pas testng nouveau lui-même Cplex(), qu'il jette des exceptions lorsque le fichier de licence est manquant plutôt, vous testez que si il jette des exceptions que vous faites la bonne chose. Dans ce cas, c'est si trivialement correct que je ne m'en soucierais probablement pas trop. Cependant, si cela était plutôt plus complexe, un traitement de récupération sérieux à faire par exemple, alors nous préférerions de beaucoup être en mesure de tester cela.

Une approche, passer dans une usine.

public CplexServices(CplexFactory myFactory) 
{ 
    try 
    { 
     _cplex = myFactory.makeCplex(); 
    } 
    catch 
    { 
     throw new Exception("Path or license file is wrong"); 
    } 
} 

maintenant dans vos tests, vous pouvez passer une usine qui peut articficially jeter l'exception déclenchant le chemin que vous souhaitez tester. Cela laisse toujours la question de savoir comment tester le constructeur Cplex() lui-même. On peut dire que ce n'est pas votre problème, les auteurs devraient avoir leurs propres tests unitaires.

+0

Je ne suis pas en train de tester si le nouveau Cplex() fonctionne correctement, je voulais juste tester si il lance l'exception correcte quand le chemin/licence est faux. Lorsque "new Cplex" échoue sur notre serveur de travail, il échoue lamentablement sans aucun message d'erreur. Je viens d'ajouter le code d'exception de lancement pour que le chemin suivant soit erroné. Une pauvre âme n'aurait pas besoin de passer une heure pour découvrir qu'elle échouait à cause d'un mauvais chemin ou d'un fichier de licence. Puis j'ai commencé à penser que s'il y avait moyen de tester cette exception correcte est lancée. Ensuite, vous êtes arrivés avec de bonnes idées. Merci... – derdo

1

Vous ne pouvez pas. Vous devrez définir un faux emplacement pour le fichier et confirmer que vous avez l'exception.

Mais probablement ce n'est pas quelque chose que vous testeriez de toute façon, car le code déterminant l'échec ne vous appartient pas.

Je présume que vous définissez l'emplacement de ce fichier dans une configuration? Ensuite, vous devrez juste tester que cet emplacement est correct; mais considérez que si vous avez plusieurs déploiements et différentes configurations, vous devrez exécuter votre test dans le bon environnement.

1

Vous pouvez utiliser

string oldPath = Environment.GetEnvironmentVariable("PATH"); 
Environment.SetEnvironmentVariable("PATH", "MyBadPath"); 
// Do tests 
Environment.SetEnvironmentVariable("PATH", oldPath); 

Pour tester un problème de chemin, mis dans un mauvais chemin. Pour tester le fichier de licence, placez un chemin vers un répertoire de test contenant un mauvais fichier de licence.

Questions connexes