Частные методы:
Если вы пытаетесь протестировать закрытые методы, это обычно означает, что вы делаете это неправильно.
Если есть функциональность, которую вы хотите проверить, но не хотите публиковать в своем классе, код пытается что-то вам сказать. Ваш класс, вероятно, имеет слишком много обязанностей. Вы должны серьезно рассмотреть возможность извлечения этой частной функциональности в новый класс, написания тестов для нового класса и предоставления вашему старому классу частного экземпляра нового класса.
Внутренние классы:
Это более допустимо, особенно если вы пишете библиотеку классов для повторного использования другими. У вас могут быть классы, которые не предназначены для общего использования, но для которых вы хотите написать модульные тесты.
Для этого случая взгляните на InternalsVisibleToAttribute .