Skocz do zawartości

Atrybut InternalsVisibleTo dla blibliotek strong-named


DevStart Blogi

Recommended Posts

Atrybut InternalsVisibleTo służy do definiowania zaprzyjaźnionych bibliotek. “Zaprzyjaźniona” biblioteka to taka, która ma dostęp do klas i metod z modyfikatorem “internal”. Zwykle korzysta się z niego w celu przetestowania wewnętrznych klas. Czasami bywa, że klasy w bibliotece mają modyfikator internal i co za tym idzie, nie ma do nich bezpośrednio dostępu z testów. Za pomocą InternalsVisibleTo można zrobić wyjątek dla jakieś biblioteki, w tym przypadku projektu z testami.

Wystarczy w pliku Assembly.cs biblioteki zawierającej klasy internal umieścić:

[assembly:InternalsVisibleTo("AnyName.Tests")

Od tego momentu, AnyName.Tests będzie mogło korzystać z wewnętrznych klas projektu,  w którym znajduje się powyższy atrybut.
Oczywiście należy pamiętać, żeby testy jednostkowe skupiały się na testowaniu zachowania, a nie internali. W wielu przypadkach, powyższy atrybut jest sygnałem, że testujemy nie to co trzeba. Czasami jednak, testowanie przez publiczne API może być zbyt skomplikowane i niedokładne. Osobiście używam czasami tego atrybutu, jeśli logika w klasach wewnętrznych jest zbyt bardzo skomplikowana, aby testować ją wyłącznie przez publiczne API.

Jeśli biblioteka jest  typu strong-named (podpis cyfrowy), wtedy musimy podać pełny klucz publiczny obok nazwy. Obydwie biblioteki (logika oraz testy) muszą być zatem podpisane. Wtedy obok nazwy, podajemy również klucz publiczny, na przykład:

[assembly:InternalsVisibleTo("TestCoverage.Tests,PublicKey=002400000480000094000000060200000024000052534131000400000100010085d32843e5e1f42acd023289
dacebe34befbf561bdbb163367bb727f9292824db5aac63c7e72e45e273809937050d21230653def915ecc91e87d1eb4313cc4ed7357fd61d7698790901d1134ba34a9ce0f82f3dfb0e9bad
9c3120a3a6324a333718636b232f4a0b41c72428f2d8704d2da83edc496fe2325816bc8dfdad8feae")]

Jak widzimy na powyższym przykładzie, wklejamy pełny klucz publiczny, a nie jego token. Wystarczy, że odpalimy Developer Command Prompt oraz użyjemy poniższej komendy:

sn -Tp TestCoverage.Tests.dll

PublicKey

Powyższa komenda wyświetli zarówno pełny klucz, jak i jego token.

Wyświetl pełny artykuł

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...