user not logged
← Previous page First page

С#: Доступ к 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.

Add new comment

Your name:
*Email:
Homepage:
Subject:
*Comment:
 
* denotes required field
← Previous page First page

Where am I?

This is an individual post page where its content and comments are located.

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