Au fur et à mesure que je développe du code, je veux souvent tester certains des blocs de construction d'une classe, même s'ils sont normalement privés. Si mes tests unitaires sont dans le projet, je peux utiliser "Friend" pour accomplir ceci et garder les fonctions privées pour un usage normal. Mais je préfère déplacer mes tests NUnit dans leurs propres projets séparés. Comment puis-je obtenir l'effet que je recherche?Comment tester unitairement des fonctions privées à partir d'un projet distinct dans VB .NET?
Répondre
Vous ne pouvez pas (facilement) Test privé des méthodes d'un autre projet, mais il est assez fréquent de tester internes méthodes (Friend
en VB) d'un projet de test à l'aide InternalsVisibleToAttribute
. Cela rend les membres Friend
accessibles à un autre assembly.
Apparemment, c'était nouveau dans VB 9 bien qu'il était disponible en C# 2 ... pas très bien pourquoi, mais this blog post from Bart de Smet donne un exemple rapide.
Notez que si votre assembly de production est signé, votre assembly de test devra également être signé, et vous devrez spécifier la clé publique dans les arguments InternalsVisibleToAttribute
. Voir this Stack Overflow answer pour plus de détails.
Vous pouvez utiliser Reflection pour appeler les méthodes privées. Il y a beaucoup d'échantillons là-bas pour le faire.
Et c'est celui qui m'a le plus aidé: http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx – demoncodemonkey
A partir d'une recherche rapide Google: http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx
Les bases: (ce qui est collé à partir du site du projet de code lié ci-dessus)
public static object RunStaticMethod(System.Type t, string strMethod,
object [] objParams)
{
BindingFlags eFlags =
BindingFlags.Static | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
null, aobjParams, eFlags);
} //end of method
public static object RunInstanceMethod(System.Type t, string strMethod,
object objInstance, object [] aobjParams)
{
BindingFlags eFlags = BindingFlags.Instance | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
objInstance, aobjParams, eFlags);
} //end of method
private static object RunMethod(System.Type t, string
strMethod, object objInstance, object [] aobjParams, BindingFlags eFlags)
{
MethodInfo m;
try
{
m = t.GetMethod(strMethod, eFlags);
if (m == null)
{
throw new ArgumentException("There is no method '" +
strMethod + "' for type '" + t.ToString() + "'.");
}
object objRet = m.Invoke(objInstance, aobjParams);
return objRet;
}
catch
{
throw;
}
} //end of method
- 1. Comment tester unitairement cette méthode?
- 2. Test des fonctions privées en javascript
- 3. Comment tester unitairement un plug-in dans une application?
- 4. Fonctions VBA et privées
- 5. Comment tester unitairement les constructeurs de classes immuables?
- 6. Comment tester unitairement un DAO qui étend SqlMapClientDaoSupport
- 7. Comment tester unitairement une fonction NextPasswordChangeDate par rapport à Active Directory
- 8. Transmettre des tableaux à des fonctions SQL à partir de .NET C#
- 9. Substitution de fonctions virtuelles publiques avec des fonctions privées en C++
- 10. Appel des fonctions DLL à partir de VB6
- 11. Comment tester unitairement une action du contrôleur MVC qui dépend de l'authentification dans C#?
- 12. Comment puis-je avoir mes fonctions d'accès à la page à partir d'un fichier .vb dans App_Code?
- 13. Trouver des fonctions utilisées dans un projet de bibliothèque
- 14. Structuremap dans VB .Net (WebForms)
- 15. Appel des méthodes jQuery à partir des fonctions Javascript
- 16. Lignes de code dans votre projet VB
- 17. chaîne équation vb .net
- 18. VS2005 - Appelez une méthode à partir d'un projet distinct? (Même solution)
- 19. Diffusion de types dans VB .NET
- 20. Envoyer permet d'accéder à des variables privées
- 21. Comment tester unitairement une méthode statique en utilisant un faux objet pour la dépendance?
- 22. Comment utiliser AfxOleGetMessageFilter dans un programme VB .NET?
- 23. Déclaration des fonctions externes Dans un cacao/Obj-C Projet
- 24. Comment générer des classes LINQ to SQL privées?
- 25. Fonctions de test unitaires qui ne modifient que les variables membres privées
- 26. Construction de propriétés dynamiques à l'exécution dans VB .NET
- 27. Quelle est la meilleure façon de tester unitairement une méthode asynchrone?
- 28. Fonction de rappel à partir d'une DLL non gérée dans VB .NET
- 29. Comment exécuter des procédures privées dans un package Oracle?
- 30. Appel animation XAML à partir du code VB dans WPF
Quant à savoir pourquoi il était nouveau dans VB9, il était un coût/profiter du compromis. VB a une façon très différente de résoudre les noms que C# et InternalsVisibleTo complique grandement la recherche de nom. Il était trop coûteux pour VB8 et est donc tombé à VB9. Nous sommes en train de faire d'autres changements autour de la résolution de noms pour (suite) – JaredPar
(cont) en tenir compte dans VB10. – JaredPar
merci pour cette réponse –