Как тестировать internal методы и классы в C# — InternalsVisibleToAttribute
![[assembly: InternalsVisibleToAttribute("YourProject.UnitTests")] [assembly: InternalsVisibleToAttribute("YourProject.UnitTests")]](https://habrastorage.org/getpro/habr/upload_files/2a6/066/368/2a6066368f2394a9024ee57a5504259f.jpg)
Представьте, что вы разрабатываете библиотеку, которой будут пользоваться тысячи людей ?. Чтобы убедиться в стабильности — нужно всё хорошенько покрыть тестами. Все мы любим инкапсуляцию, верно (я надеюсь)? Поэтому мы не разрешаем использовать всё подряд из нашей сборки, а с умом используем модификаторы доступа и позволяем использовать только public классы и методы.
В C#, есть 7 модификаторов доступа, основные:
- private
— доступ только внутри текущего класса
- protected
— доступ внутри текущего и дочерних классов
- public
— классы и методы доступны где угодно, также из сборок, использующих текущую
- internal
— публичный API, внутри текущей сборки. Как public, но нет доступа из сборок использующих текущую
- остальные можно посмотреть тут
Но, C# — не JavaScript, и для тестов создаётся отдельная сборка, а internal методы в ней не доступны.
Чтобы тестировать internal
функциональность, нужно использовать атрибут InternalsVisibleToAttribute
, и в качестве параметра указать имя тестовой сборки. Тогда все internal методы и классы будут доступны для тестирования.
[assembly: InternalsVisibleToAttribute("YourProject.UnitTests")]