InternalsVisibleTo не работает

Я вставляю строку:

[assembly: InternalsVisibleTo("MyTests")]

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

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

Ответ 1

Если ваша сборка подписана с сильным именем посмотрите на этот ответ.

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

Ответ 2

Давайте немного разбить его, так как многие из нас испытали этот небольшой переполох в прошлом...

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

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

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

Ответ 3

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

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

Ответ 4

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

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

Я изменил:

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

To:

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