Может ли метод GetField () класса PrivateObject получить доступ к закрытой константной строке в C # 4.0? - PullRequest
4 голосов
/ 22 марта 2011

Я пишу модульный тест, который обращается к файлу в изолированном хранилище данных.Имя файла хранится в частной константной строке внутри класса, потому что я не использую его где-либо еще во всем приложении.

Однако, когда я запускаю свой модульный тест, я получаю ошибку «Поле не найдено», когда я вызываю метод GetField («fieldName») экземпляра класса PrivateObject.

string historyFileName = (string)history.GetField("ISOLATED_HISTORY_FILE");

Ответы [ 3 ]

5 голосов
/ 22 марта 2011

Используйте перегрузку, которую вы можете передать BindingFlags и передать BindingFlags.NonPublic | BindingFlags.Instance.

Взгляните здесь .


ОБНОВЛЕНИЕ

Я думал, у вас есть поле.Const заменяется литералом во время компиляции.Измените на static readonly и передайте BindingFlags.NonPublic | BindingFlags.Static.

Если вы не можете изменить источник, тогда нет никакого способа

2 голосов
/ 08 ноября 2016

Используйте PrivateType, затем вызовите метод GetStaticField для получения значения частного констант.

0 голосов
/ 22 марта 2011

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

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