Wie ich Code entwickeln, möchte ich oft zu Unit-Test einige der Bausteine einer Klasse, auch wenn sie in der Regel privat sind. Wenn sich meine Komponententests innerhalb des Projekts befinden, kann ich "Freund" verwenden, um dies zu erreichen, und die Funktionen dennoch für den normalen Gebrauch privat halten. Aber ich würde lieber meine NUnit-Tests in eigene Projekte verschieben. Wie erreiche ich den gewünschten Effekt?Wie kann ich private Funktionen aus einem separaten Projekt in VB .NET testen?
Antwort
Sie können nicht (leicht) Test private Methoden aus einem anderen Projekt, aber es ist durchaus üblich interne Methoden (Friend
in VB) von einem Testprojekt InternalsVisibleToAttribute
mit zu testen. Dies macht Friend
Mitglieder für eine andere Baugruppe zugänglich.
Anscheinend war dies in VB 9 neu, obwohl es in C# 2 verfügbar war ... nicht ganz sicher warum, aber this blog post from Bart de Smet gibt ein schnelles Beispiel.
Beachten Sie, dass Ihre Testassembly auch signiert sein muss, wenn Ihre Produktionsassembly signiert ist, und Sie müssen den öffentlichen Schlüssel in den Argumenten InternalsVisibleToAttribute
angeben. Weitere Informationen finden Sie unter this Stack Overflow answer.
können Sie Reflexion verwenden, um die privaten Methoden aufzurufen. Es gibt viele Beispiele dafür.
Und das ist derjenige, der mich am meisten geholfen: http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx – demoncodemonkey
Von einer schnellen Google-Suche: http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx
Die Grundlagen: (dies aus der Code Projektseite oben verlinkten eingefügt wird)
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. Wie kann ich das VB-Projekt einrichten?
- 2. Wie testen Funktionen in einem privaten Verzeichnis?
- 3. Wie kann ich ungenutzte Funktionen in einem PHP-Projekt finden?
- 4. Wie kann ich überladene Funktionen testen?
- 5. Wie verwende ich AfxOleGetMessageFilter in einem VB .NET-Programm?
- 6. VB NET - Wählen * Aus Ausgabe
- 7. Wie kann ich private Methoden mit DUnit testen?
- 8. Wie verschiebt man ein VB .NET Website Projekt?
- 9. Wie wird LINQ zu SQL in einem separaten Projekt übertragen?
- 10. Wie kann ich BOOST in einem separaten Namespace umbrechen?
- 11. Spezifikation Muster in einem separaten Projekt?
- 12. Wie kann ich meinen Seitenzugriff auf Funktionen aus einer .vb-Datei in App_Code haben?
- 13. JSON.Net Deserialisierung in VB .Net
- 14. Wie kann ich Komponententests für private clojure-Funktionen schreiben?
- 15. .NET-Programmierung - Kann ich von meinem VB.NET-Projekt aus auf Mitglieder eines C-Sharp-Projekts zugreifen?
- 16. Private Funktionen in JavaScript
- 17. Wie führe ich private Prozeduren in einem Oracle-Paket aus?
- 18. Wie kann ich (lokal) gehostet erholsame API auf einem separaten Rechner testen
- 19. Kann ich MarkLogic SJS aus Mokka testen?
- 20. Wie kann ich den HTML-Code über VB .Net ändern?
- 21. vb .net 2015 Codierung kann nicht Sonderzeichen
- 22. Wie kann ich FAST-Funktionen aus einem Bild extrahieren?
- 23. Wie testen Sie private Methoden mit NUnit?
- 24. Jasmine in einem separaten Testprojekt
- 25. Behat Benutzer Login in separaten Funktionen
- 26. Late Binding Vb .Net
- 27. Wie importiere ich ein .NET Core-Projekt in ein anderes .NET Core-Projekt in Visual Studio?
- 28. Wie kann ich die Funktionen von VIM testen?
- 29. Wie kann ich dieses VB Script automatisieren?
- 30. Gleichung Zeichenfolge in vb .net
Wie, warum es war neu in VB9, war es ein Kosten/Nutzen ausgleichen. VB hat eine ganz andere Art und Weise Namen der Lösung als C# und InternalsVisibleTo sehr viel Namenssuche erschwert. Es war zu teuer für VB8 und fiel daher auf VB9. Wir machen eigentlich weitere Änderungen rund um die Namensauflösung (Fortsetzung) – JaredPar
(Fortsetzung) entfallen diese in VB10. – JaredPar
Dank für diese Antwort –