Y a-t-il une bonne façon de le faire pour que les fonctions soient publiques lorsque je teste avec Nunit, mais privée sinon? P>
Ne pas avoir à générer beaucoup de code étranger serait également agréable. P>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - p>
Il semble que les solutions tombent sous 3 types: p>
Peut-il y avoir un moyen de faire cela par programme? c'est-à-dire simplement créer une nouvelle application temporaire qui fait toutes les fonctions protégées / privées / internes / internes code> (code> public code>, branchez-le dans Nunit, exécutez les tests là-bas, puis revenez à l'aide de la version privée. Fonctions pour la version de version? p>
6 Réponses :
au lieu de privé code> <-> public code> Vous pouvez leur faire interne code> <-> public code> en utilisant internesVissileto code> . p>
InternalsVissibleto code> est un attribut d'assemblage que vous pouvez utiliser dans l'assemblage que vous souhaitez rendre visible à votre appareil de test de votre appareil. Vous devrez signer votre appareil de test de l'unité, car le InternalsVissileto Code> L'attribut s'appuie sur la clé publique de l'Assemblée appelante. P>
Hm ... c'est intéressant. Je cherchais quelque chose comme ça un peu de temps. Vous auriez également besoin d'utiliser System.Runtime.Compilerservices pour que cela fonctionne. Mais cela ne résout pas le problème de la rendre privée au sein de l'Assemblée. Merci.
private int MethodToTest() {...}
#if DEBUG
public int MethodTested()
{
return MethodToTest();
}
#endif
Test MethodTested()
Il y a toujours interne code> car d'autres ont souligné, mais comme cela est distinct des deux privé code> et public code> (et peut donc affecter d'autres codes dans La même assemblée), pourquoi ne pas utiliser de directives de compilateur:
Essayez ceci:
#if DEBUG
public type MethodName(parameters)
#else
private type MethodName(parameters)
#endif
{
// method body
}
Vous n'avez peut-être pas besoin de si vous avez une bonne couverture sur vos méthodes publiques qui appellent les méthodes privées, mais qui semble être un autre débat de soi-même. p>
Ceci est un bon lien sur TDD et différentes façons de le faire: Comment tester des méthodes privées et protégées dans .NET P>
Discussion intéressante. Merci.
Bientôt, essayez ceci:
#if DEBUG
public
#else
private
#endif
int myMethod(params)
{
// do something.
}
Avez-vous essayé d'utiliser
interne code>?Si vous avez besoin de tester une méthode, il devrait être public en premier lieu.
Ce que vous voulez faire ne devrait pas être fait. Vous vous demandez simplement des ennuis. Comme Carnoaurus suggère, si une méthode nécessite un test unitaire, il devrait déjà être public.
Juste une note: la meilleure pratique consiste à éviter les déclarations "# à déboguer" comme beaucoup l'ont suggéré.
Pourquoi voudriez-vous exposer certaines méthodes à d'autres développeurs? N'est-il pas préférable d'être plus complet avec vos tests?
@DDD: Je suis d'accord, mais je ne sais pas pourquoi. Où avez-vous lu / entendu parler de cela?