Для модульного тестирования вы не должны тестировать частные методы, да, но для интеграционных тестов (с использованием среды модульного тестирования, такой как MSTest или NUnit) я бы очень хотел запустить внутренние вызовы API для тестового URL-адреса, чтобы убедиться, что текущий код работает, когда сторонний поставщик API меняет свой сервер.
Учитывая сложность системы (глупые API имеют сотни параметров), я спрятал большую часть ее за интерфейсами и IoC, а вспомогательный класс API полностью встроен в нашу библиотеку уровня данных. Я не хочу менять это, потому что раньше это было общедоступно, и мы обнаружили, что странный разработчик, плохо знакомый с проектом и в целом неопытный, сразу же вызывал API прямо из кода веб-сайта. Создание класса внутренним должно гарантировать, что они, по крайней мере, думают, прежде чем разрушать точку нашего уровня абстракции.
Я создал массу кода отражения, чтобы добраться до внутренних методов, но он работает не слишком хорошо и становится sphagetti-ish. Есть ли способ сделать методы общедоступными для определенных библиотек? Есть ли способ заставить тестовую библиотеку рассматривать себя как часть библиотеки, содержащей API? Является ли это лучшей практикой?