2013-09-17 6 views
39

вставить строку:InternalsVisibleTo не работает

[assembly: InternalsVisibleTo("MyTests")]

внутри моего проекта под испытания (Properties/AssemblyInfo.cs), где MyTests это название проекта Unit Test. Но по какой-то причине я до сих пор не могу получить доступ к внутренним методам из проекта модульного тестирования.

Любые идеи о том, что я делаю неправильно?

+1

Это было looong время, но я думаю, что две сборки должны быть подписаны с той же подписью? – Joe

+0

Возможный дубликат атрибута [InternalsVisibleTo не работает] (http://stackoverflow.com/questions/106880/internalsvisibleto-attribute-isnt-working) – Jon

+0

Я прочитал, что на вопрос в SO, но я не уверен, что это может создавать проблемы в будущем. Я также не смог подписать мои сборки. – Cemre

ответ

37

Если ваша сборка подписана с сильным именем look at this answer.

В противном случае проверьте, что имя вашей тестовой сборки действительно является «MyTests.dll» (оно не должно совпадать с именем проекта, хотя оно будет по умолчанию).

+3

+1 yep, я помню, что я потратил немного времени на эту проблему: сборка _file system name_ тестового приложения отличалась от имени его проекта :) –

+0

+1. Имя класса по умолчанию для класса или единицы измерения является допустимым, но никогда я не переименую его к моменту публикации. В результате .dll сохранит первое сохраненное имя файла до тех пор, пока имя «Assembly name» не будет изменено в свойствах проекта. – Vic

15

Позволяет разбить его немного, как многие из нас испытали это небольшое перепутывания в прошлом ...

Сборка A имеет свой внутренний класс. В сборке B приведены ваши модульные тесты.

Вы хотите предоставить внутренности сборки видимости в сборке B.

Вы должны поместить атрибут сборки InternalsVisibleTo внутри узел А и предоставить доступ к сборке B.

2

Вам все еще нужен тестовый проект для ссылки на ваш основной проект.

Это легко заметить, и если у вас нет существующего тестового кода, это может выглядеть так, как InternalsVisibleTo не работает.

0

В моем случае я кодировал интерфейс. Поскольку интерфейсы могут определять только общедоступные свойства, внутренние свойства не присутствовали на интерфейсе.

Убедитесь, что вы не делаете то же, что и я!

Я изменил:

Assert.IsNotNull((exportFileManager)?.ThumbnailFileExporter); 

To:

Assert.IsNotNull((exportFileManager as ExportFileManager)?.ThumbnailFileExporter); 

 Смежные вопросы

  • Нет связанных вопросов^_^