user not logged

С#: Доступ к internal методам из тестовой сборки.

C#
Author:Анатолий Тутов Timestamp:28 / 12 / 2010 @ 11:20:54
Tags: C#, hints, friend assemblies, internal

Зачастую, приходится писать тесты к коду, на архитектуру которого повлиять в данный конкретный момент нет никакой возможности. И все бы хорошо, но внезапно оказывается, что один какой-нибудь малозначительный, на первый взгляд, метод, который тем не менее надо вызвать из теста, описан автором как internal и находится, как назло вовсе не в той сборке, в которой будет расположен наш тест. «Нет проблем!» — воскликнет читатель, — «мы же тестируем только public-код!» Так-то оно так, но представьте, что автор тестируемой сборки по неведомой причине сделал internal именно тот метод, без вызова которого протестировать все остальное просто нет шансов.

«CLR via C#» Рихтера подсказывает нам блестящее решение этой проблемы. Это так называемые friend assemblies — обратите внимание, их ни в коем случае не следует использовать как попало. Они ни в коем случае не должны решать архитекурные проблемы вашей системы. Только технологические — как например доступность кода юнит-тестам.

Предположим, у нас есть тестируемая сборка MyLibrary и содержащая тесты сборка MyLibrary.UnitTest. Для того, чтобы сделать internal типы MyLibrary видимыми для тестовой сборки, мы должны сделать следующее:

  1. Открыть файл AssemblyInfo.cs для сборки MyLibrary
  2. Проверить наличие или добавить в  него ссылку на System.Runtime.CompilerServices
  3. Добавить директиву
     [assembly: InternalsVisibleTo(«MyLibrary.UnitTest»)]

Вот и все. Теперь сборка MyLibrary.UnitTest может использовать внутренние типы сборки MyLibrary.

В этом блоге мы собираемся оставлять конспекты изученных материалов из разных областей. Зачем? Чтобы было, что вспомнить. И вдруг кому-то еще пригодится…
Блог «Антология Интересов» прежде размещавшийся здесь теперь доступен по другому адресу. Если вы нашли нас через поисковую систему, но на этой странице нет того, что вы искали, или сайт сообщает вам об ошибке, попробуйте поискать там.
К нам часто попадают посетители, ищущие информацию про
  • ИЧП «Барьер-С»,
  • НПЦ «Астросистемы»,
  • продавцов краски.
К сожалению информацией по данным вопросам мы не располагаем.

Where am I?

This is a main page of the blog where most recent posts are located.

Relative tags

Powered by: Motoko Blog System 0.9.5 beta | Used theme: Proximity One
Page generation time: 0.38 s | SQL requests number: 8 | Timestamp: 05:15:21, 23-02-2012
May the force be with you