Похоже, что проблема, с которой вы здесь можете столкнуться, заключается в том, что вы пытаетесь смоделировать класс settings
, но у конструктора трекера нет способа на самом деле использовать ваш класс настроек ложных настроек,потому что во время компиляции исправлено прямое обращение к settings
.
В «Кулинарной книге» действительно объясняется, как решить эту проблему, в разделе « Пересмешливые невиртуальные методы »: во-первых, вы делаете свой макетclass, тогда вы предоставляете некоторые средства внедрения зависимостей , которые позволяют выбирать между рабочей и фиктивной версиями класса во время компиляции.Один из способов сделать это состоит в том, чтобы сделать трекер шаблоном класса, параметризованным с классом настроек, с чем-то вроде:
template <typename settings_class> class tracker_template
{
public:
static tracker_template<settings_class>& get_instance()
{
static tracker_template<settings_class> instance;
return instance;
}
// ...
private:
tracker_template()
{
_ip_count = settings_class::get_instance().get_ips();
// ...
}
// ...
};
После чего вы можете, например.using tracker = tracker_template<settings>;
чтобы продолжить использовать трекер в вашем рабочем коде, и вместо этого использовать tracker_template<MockSettings>
в вашем тестовом коде.
Вероятно, не существует способа решить эту проблему без изменения вашего кода.