В С++ я часто делал класс unit test другом класса, который я тестировал. Я делаю это, потому что иногда чувствую необходимость писать unit test для частного метода или, возможно, хочу получить доступ к некоторому частному члену, чтобы я мог более легко настроить состояние объекта, чтобы я мог его протестировать. Для меня это помогает сохранить инкапсуляцию и абстракцию, потому что я не изменяю открытый или защищенный интерфейс класса.
Если я куплю библиотеку сторонних разработчиков, я бы не хотел, чтобы ее публичный интерфейс был загрязнен множеством публичных методов, о которых мне не нужно знать просто потому, что вендор хотел unit test!
Я также не хочу беспокоиться о группе защищенных членов, о которой мне не нужно знать, если я наследую от класса.
Вот почему я говорю, что он сохраняет абстракцию и инкапсуляцию.
На моем новом задании они хмурятся от использования классов друзей даже для модульных тестов. Они говорят, потому что класс не должен "знать" что-либо о тестах и что вы не хотите жесткой связи класса и его теста.
Может кто-то объяснит мне эти причины, чтобы я мог лучше понять? Я просто не понимаю, почему плохо использовать друга для модульных тестов.