Да, это хорошее место для использования паттерна Pimpl, и да, его будет сложно проверить как есть.
Проблема в том, что два понятия противостоят друг другу:
- Pimpl - это скрытие зависимостей от клиента: это сокращает время компиляции / компоновки и лучше с точки зрения стабильности ABI.
- Юнит-тестирование обычно касается хирургического вмешательства в зависимости (например, использование макетов)
Однако это не значит, что вы должны жертвовать одним ради другого. Это просто означает, что вы должны адаптировать свой код.
А что если Connection
был реализован с той же идиомой?
class Connection
{
private:
ConnectionImpl* mImpl;
};
И доставляется через фабрику:
// Production code:
Client client = factory.GetClient();
// Test code:
MyTestConnectionImpl impl;
Client client = factory.GetClient(impl);
Таким образом, вы можете получить доступ к мельчайшим деталям вашей тестовой реализации соединения во время тестирования клиента, не подвергая реализацию клиенту или не нарушая ABI.