Frage

Ich springe in Komponententests die Visual-Studio 2008 Art und Weise, und ich frage mich, was ist der beste Weg, Quermontage class Zugang zu Testzwecken zu erreichen.

Grundsätzlich habe ich zwei Projekte in einer Lösung:

  1. MyProject (C #)
  2. MyProjectTests (C # Test Project)

Alles in MyProject hat derzeit Zugänglichkeit Standard, die, wenn ich mich richtig bedeutet alles erinnern effektiv internal. Ich bin meistens Blick auf die class Ebene zu testen, aber es gibt ein paar delegates beteiligt.

Es wird wahrscheinlich eine externe API irgendwann in der Zukunft sein, aber ich bin über 20% der Art und Weise vollständig zu verfügen (zumindest auf dem Papier) und ich bin immer ziemlich misstrauisch von mehr Code auf diesem ungetesteten Schichtung Ader. Dementsprechend würde Ich mag jetzt einige Tests durchgeführt werden, bevor die App für traditionelle vollständig genug ist (sprich: schlecht und / oder faul). Funktionsprüfung und auf jeden Fall vor der Version n + 1 externe API up sind

Neben einer klaren Antwort, ein Beispiel für die Lösung würde sehr geschätzt werden.

War es hilfreich?

Lösung

Sie können Attribut Assemblyebene verwenden InternalsVisibleToAttribute um dies zu erreichen.

Hinzufügen

[assembly:InternalsVisibleTo("MyProjectTests")]

zu AssemblyInfo.cs in Ihrer MyProject Montage.

Andere Tipps

Sie können interne Methoden testen, indem Sie ein Attribut auf die AssemblyInfo.cs für Ihr Hauptprojekt hinzufügen, Zugriff auf die internen Verfahren zu einer benannten Versammlung geben:

[assembly: InternalsVisibleTo ( "MyProjectTestsNameSpace.MyProjectTests")]

Weitere Informationen hier

Sie müssen hinzufügen

[assembly:InternalsVisibleTo("Unit.Tests.Assembly")] 

auf AssemblyInfo.cs Ihrer "MyProject (C #)". Das ermöglicht dann die Tests, die internen Verfahren für die Prüfung zugreifen zu können.

Sieht aus wie Sie benötigen die InternalsVisibleToAttribute

Allerdings würde ich gegen diesen Ansatz empfehlen -. Testen Sie Ihre internen Klassen über die öffentliche Schnittstelle oder API

Obwohl [InternalsVisibleTo] ist vernünftigste Weg IMO, es gibt mindestens zwei andere Möglichkeiten, um dies zu realisieren:

  • Durch die Verwendung von Reflexion

     var method = instance.GetType().GetMethod(
        methodName, BindingFlags.NonPublic | BindingFlags.Instance, 
        null, paramTypeArray, null);
     return method.Invoke(instance, parameters);
    

Das Problem bei diesem Ansatz ist, dass, wenn die Methodennamen oder Unterschrift ändert, wird der Unit-Test starten zu Laufzeit versagt, während [InternalsVisibleTo] leicht diese brechende Änderung bei der Kompilierung gepflückt worden wäre auf.

Ich fand dieses https://msdn.microsoft.com/en -US / library / hh598957.aspx Hoffe, es könnte jemand helfen.

Zusammenfassung:

  • In Ihrem Unit-Test-Projekt, fügen Sie einen Verweis auf den Code unter Test. Hier ist, wie die Referenz auf ein Code-Projekt in der gleichen Lösung zu erstellen:
  • Wählen Sie das Projekt in Projektmappen-Explorer.
  • Auf dem Menü Projekt auf Verweis hinzufügen ....
  • Im Reference Manager Dialogfeld öffnen Sie die Lösung Knoten und wählen Sie Projekte.
  • Sie den Code Projektnamen überprüfen und das Dialogfeld schließen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top