Что эквивалентно стандартному (пакетному) доступу Java в C #? - PullRequest
7 голосов
/ 25 августа 2009

Что эквивалентно стандартному (пакетному) доступу Java в C #? Есть один? Есть ли способ ограничить доступ к определенному пространству имен?

Проблема:

Я пытаюсь ограничить доступ к определенным методам только моими тестами NUnit - в JUnit я сделал бы это, сделав доступ к пакету методов и имея тест в том же пакете, но в src / test / java вместо src / Основной / Java. Как мне добиться чего-то похожего в C #?

Примечание: я не могу сделать методы internal, потому что мои тесты находятся в отдельной сборке - как соглашение NUnit - или это?

Ответы [ 4 ]

23 голосов
/ 25 августа 2009

C # не имеет доступа на уровне пакета или пространства имен - только на уровне сборки - который также известен как внутренний доступ.

Однако вы можете сделать ваши методы внутренними и использовать атрибут InternalsVisibleTo , чтобы представить их вашей сборке тестового модуля.

Вы можете найти полезным прочитать этот пост и этот .

1 голос
/ 25 августа 2009

Есть другой способ, который сильно отличается. Вы можете использовать частичные классы примерно так:

  1. Файл # 1 = тестируемый код. Написано так же, как обычно, но с частичным ключевым словом
  2. Файл # 2 = модульный тест, содержит вложенный класс, который является фактическим модульным тестом.

Вложенные классы имеют доступ ко всему в своем родительском классе (включая приватные методы). Как часть процесса сборки (возможно, сценарии MSBuild или NAnt), просто не компилируйте тесты как часть окончательной сборки, и тестируемый код будет работать нормально.

1 голос
/ 25 августа 2009

Нет ничего, что является точным эквивалентом.Ключевое слово internal близко, но оно ограничено сборкой, а не пространством имен.

Если что-то помечено как внутреннее, к нему может получить доступ только код в той же сборке (dll, exe)

0 голосов
/ 25 августа 2009

Вы можете ограничить методы, которые будут видны только в его сборке, сделав их внутренними

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...