Можно протестировать закрытые методы, объявив свою тестовую сборку дружественной сборкой целевой сборки, которую вы тестируете. Смотрите ссылку ниже для деталей:
http://msdn.microsoft.com/en-us/library/0tke9fxk.aspx
Это может быть полезно, так как оно в основном отделяет ваш тестовый код от вашего рабочего кода. Я никогда не использовал этот метод сам, поскольку я никогда не находил потребность в этом. Я полагаю, что вы могли бы использовать его для тестирования экстремальных тестовых случаев, которые вы просто не можете воспроизвести в вашей тестовой среде, чтобы увидеть, как ваш код справляется с этим.
Как уже было сказано, вам действительно не нужно проверять частные методы. Вы более чем хотите, чтобы реорганизовать свой код в меньшие строительные блоки. Один совет, который может помочь вам, когда вы придете к рефакторингу, это попытаться подумать о домене, к которому относится ваша система, и подумать о «реальных» объектах, населяющих этот домен. Ваши объекты / классы в вашей системе должны иметь непосредственное отношение к реальному объекту, что позволит вам выделить точное поведение, которое должен содержать объект, а также ограничить ответственность объектов. Это будет означать, что вы проводите рефакторинг логически, а не просто чтобы сделать возможным тестирование определенного метода; Вы сможете проверить поведение объектов.
Если вы все еще чувствуете необходимость тестирования внутреннего, вы можете также подумать о том, чтобы при тестировании использовать макеты, так как вы хотите сосредоточиться на одном фрагменте кода. Насмешка - это то, где вы вводите в нее зависимости объектов, но внедренные объекты не являются «реальными» или производственными объектами. Это фиктивные объекты с жестко запрограммированным поведением, которые упрощают выявление поведенческих ошибок. Rhino.Mocks - это популярный бесплатный фреймворк, который по сути напишет объекты для вас. TypeMock.NET (коммерческий продукт с доступным выпуском для сообщества) является более мощной средой, которая может макетировать объекты CLR. Очень полезно для насмешки над классами SqlConnection / SqlCommand и Datatable, например, при тестировании приложения базы данных.
Надеемся, что этот ответ даст вам немного больше информации, чтобы проинформировать вас о модульном тестировании в целом и помочь вам получить лучшие результаты от модульного тестирования.