Идиома pImpl в С++ направлена на скрыть детали реализации (= частные члены) класса от пользователей этого класса. Однако он также скрывает некоторые зависимости этого класса, которые обычно считаются плохими с точки зрения тестирования.
Например, если класс A скрывает детали его реализации в классе AImpl, доступ к которому возможен только из A.cpp, а AImpl зависит от множества других классов, становится очень сложно класс unit test, так как среда тестирования не имеет доступа к методам AImpl, а также не может вводить зависимость в AImpl.
Кто-нибудь сталкивался с этой проблемой раньше? и нашли ли вы решение?
- изменить -
По смежной теме кажется, что люди предлагают проверять публичные методы, открытые интерфейсом, а не внутренними. Хотя я могу концептуально понять это утверждение, я часто обнаруживаю, что мне нужно тестировать частные методы изолированно. Например, когда публичный метод вызывает метод private helper, который содержит некоторую нетривиальную логику.