Я широко использовал эту технику - это означает, что мои модульные тесты могут тестировать аспекты библиотеки кода, которые не видны обычным пользователям.
Хотя использование [InternalsVisibleTo]
действительно увеличивает сцепление, я считаю, что (незначительное) увеличение стоит выигрышей.
Мои модульные тесты уже тесно связаны с тестируемым кодом - хотя я пытаюсь писать тесты, которые гарантируют конкретные результаты, а не конкретные реализации, путем доступа к вещам, невидимым для обычных потребителей, я несколько ограничиваю реализацию.
В противном случае связь минимальна - наличие атрибута [InternalsVisibleTo]
в сборке кода и маркировка некоторых вещей как внутренних вместо частных (или защищенный внутренний вместо защищенный ).
(Обратите внимание, что здесь я игнорирую любые конструктивные изменения, вызванные использованием модульного тестирования, что является совершенно другим обсуждением.)
Атрибут [InternalsVisibleTo]
требует строгого именования ваших сборок. Если вы этого еще не сделали, вы можете найти это немного обременительным, поскольку сборка со строгим именем может зависеть только от других сборок со строгим именем, что может привести к необходимости изменения нескольких сборок.
Правильный выбор атрибута может быть немного сложным, так как он должен включать открытый ключ вашей тестовой сборки. У IDesign есть полезный Инструмент сборки друзей , который создает атрибут в буфере обмена и готов к вставке. Рекомендуется.