Feedback

C# - InternalsVisibleTo

Veröffentlicht von am 12.07.2015
(0 Bewertungen)
Besonders beim Erstellen von UnitTests muss man hin- und wieder mal auf private oder als internal markierte Typen (Klassen, Strukturen, Enumerationen, Schnittstellen) zugreifen. Aus Sicht der Programmiersprache ist das weder vorgesehen noch möglich.

Mit dem hier gezeigten Attribut für die Assembly aber schon. Dieses muss einfach irgendwo im Projekt hinein gesetzt werden, am besten aber in der AssemblyInfo.cs/.vb. Dadurch wird alles innerhalb der Assembly für die angegebene sozusagen "öffentlich".
GFU-Schulungen  [Anzeige]

C# 2017/2015/2013 Aufbau

In dieser Schulung lernen Sie fortgeschrittene Techniken im Bereich .Net C#. Dabei stehen neben den eigentlichen Techniken auch architektonische Aspekte im Mittelpunkt.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Projektmitglieder - Kompakt

Nach Teilnahme an dieser Schulung sind Ihnen die Grundlagen von ALM geläufig. Sie planen und steuern Projekte effizient mit dem Visual Studio Team Foundation Server.

//wenn TestAssembly nicht signiert ist:
[assembly: InternalsVisibleTo("TestAssembly")]

//wenn TestAssembly signiert ist:
//TODO: MYPUBLICKEY mit dem öffentlichen Schlüssel des Zertifikats ersetzen
[assembly: InternalsVisibleTo("TestOtherAssembly, PublicKey=MYPUBLICKEY")]

2 Kommentare zum Snippet

Ralf Schoch schrieb am 12.07.2015:
Um das gleiche zu erreichen gibt es auch das PrivateObject.
Ich finde das persönlich den besseren Weg, da ich hier nichts an dem zu testenden Code verändern muss.

MSDN
https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privateobject.aspx

Beispiel:
https://akurniaga.wordpress.com/tag/unit-test-privateobject-visual-studio/
Koopakiller schrieb am 17.07.2015:
Soweit ich weiß ist das PrivateObject für den Zugriff auf private Member geeignet, aber nicht für den Zugriff auf private Typen. Man könnte hier natürlich auch per Reflection drauf zugreifen, nur ist das unnötig Fehleranfällig und auch nicht sonderlich effizient. Daher finde ich InternalsVisibleTo für diese Zwecke gar nicht so schlecht.
 

Logge dich ein, um hier zu kommentieren!