Festlegen des InternalsVisibleTo-Attributs

Aktualisiert: November 2007

Der Code könnte Klassen, Schnittstellen oder Strukturen enthalten, die über den internal-Zugriffsqualifizierer in Visual C# oder über den Friend-Zugriffsqualifizierer in Visual Basic verfügen. Wenn Typen über diesen Qualifizierer verfügen, liegt einer der beiden folgenden Gründe vor:

  • Sie haben sie explizit als intern markiert.

  • Standardmäßig werden Klassen der obersten Ebene, Schnittstellen oder Strukturen, die über keinen expliziten Zugriffsqualifizierer verfügen, als intern behandelt.

Private-, Internal- und Friend-Elemente, die im zu testenden Code enthalten sind, sind für den Testcode standardmäßig nicht sichtbar, können jedoch trotzdem getestet werden. Informationen über das Testen privater Methoden finden Sie unter Gewusst wie: Testen einer privaten Methode.

Testen von Elementen mit dem Internal-Zugriffsqualifizierer

Wenn Sie Komponententestmethoden für Code generieren, der interne Typen enthält, wird u. U. das Dialogfeld InternalsVisibleTo-Attribut hinzufügen angezeigt. Es enthält die folgende Ja-Nein-Frage:

Sie haben angegeben, dass Tests für einen Typ generiert werden sollen, der als Friend oder Internal markiert ist. Möchten Sie dem Projekt <Projektname> das InternalsVisibleTo-Attribut hinzufügen?

Wenn für das Quellprojekt die Signierung mit starkem Namen aktiviert ist, müssen Sie die Signierung auch für das Testprojekt aktivieren. Andernfalls wird ein Kompilierungsfehler ausgegeben.

In dieser Meldung verweist <Projektname> auf das Projekt, das den zu testenden Code enthält. Wenn Sie mit Ja antworten, wird die Assembly des zu testenden Codes mit dem InternalsVisibleTo-Attribut markiert, sodass die internen Typen in dieser Assembly für das Testprojekt sichtbar sind. Auf diese Weise können Sie Komponententests für diese internen Typen ausführen.

Hinweis:

Das InternalsVisibleTo-Attribut kann zwei Formate haben. In der einfachen Form wird die Assembly angegeben, auf die Zugriff gewährt wird. Die komplexere Form schließt außerdem einen öffentlichen Schlüssel ein, der für die Signierung mit starkem Namen verwendet wird. Weitere Informationen finden Sie in folgendem Abschnitt.

Wenn Sie mit Nein antworten, werden die internen Typen in der Testcodeassembly so behandelt, als würden sie über den private-Zugriffsmodifizierer verfügen. In diesem Fall wird bei der Testgenerierung ein privater Accessor erstellt, durch den der Testassembly der Zugriff auf diese internen und privaten Typen ermöglicht wird. Sie finden die Assembly mit dem privaten Accessor im Ordner Testverweise des Testprojekts.

InternalsVisibleTo oder ein privater Accessor: Was ist vorzuziehen?

Sie können eine private Accessorassembly verwenden, um sowohl auf private Member als auch auf interne Member zuzugreifen. Wenn der zu testende Code interne Member, aber keine privaten Member enthält, empfiehlt es sich, das InternalVisibleTo-Attribut für den zu testenden Code zu verwenden und auf die Erstellung einer privaten Accessorassembly zu verzichten. Wenn der Code jedoch private und interne Member enthält, die Sie testen möchten, verwenden Sie den privaten Accessor, da dieser Zugriff auf beide Typen bietet. Weitere Informationen finden Sie unter Verwenden privater Accessoren.

Erforderliche Signierung mit starkem Namen

Der zweite Bereich des Dialogfelds InternalsVisibleTo-Attribut hinzufügen enthält Informationen über die Signierung mit starkem Namen. Das Erstellen der Projektmappe verursacht einen Compilerfehler, solange Sie die Signierung mit starkem Namen nicht ordnungsgemäß aktivieren:

  • Wenn die Signierung mit starkem Namen für die Testcodeassembly aktiviert ist, muss sie auch für die Testassembly aktiviert werden. In diesem Fall müssen Sie das signierte InternalsVisibleTo-Attribut verwenden. Beispiel:

    [InternalsVisibleTo(“OtherAssembly, PublicKey=12435234fsdaf;l457fwi248ew843872r892r”)]

  • Wenn die Signierung mit starkem Namen für die Testcodeassembly nicht aktiviert ist, darf sie auch für die Testassembly nicht aktiviert werden. In diesem Fall können Sie das nicht signierte InternalsVisibleTo-Attribut verwenden.

    [InternalsVisibleTo(“OtherAssembly”)]

    Hinweis:

    Wenn Sie im Dialogfeld InternalsVisibleTo-Attribut hinzufügen auf Ja klicken, fügt Visual Studio die einfache Form des InternalsVisibleTo-Attributs hinzu, und zwar die ohne den öffentlichen Schlüssel.

Wenn Sie eine Testcodeassembly instrumentieren, um das Erfassen von Codeabdeckungsdaten zu aktivieren, wirkt sich dies auch auf die Signierung mit starkem Namen aus. Weitere Informationen finden Sie unter Instrumentieren und erneutes Signieren von Assemblys.

Siehe auch

Aufgaben

Gewusst wie: Testen einer privaten Methode

Konzepte

Verwenden privater Accessoren