Мы использовали вспомогательный класс, который использует отражение для загрузки и вызова методов во внутренних классах. Также возможно изменить доступность во время компиляции, используя символ DEBUG, например
#if DEBUG
public
#else
internal
#endif
class MyInternalClass
{
...
}
Однако ответ Эско Луонтолы является более правильным, поскольку наиболее важны функциональные или бизнес-требования. Легко слишком сосредоточиться на покрытии кода, а не тестировать важные области риска.