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".
Snippet in VB übersetzen
//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!