У меня есть класс, который регистрирует свои собственные частные методы вместе с другими классами, которые будут использоваться в качестве обратных вызовов. При этом используется std::bind
для создания std::function
, указывающего на приватный метод.
Пример: (имена не являются реальными именами классов)
class DataProcessor {
private:
void callback() {
// Do something
};
public:
DataProcessor(IDataSupplier* supplier) {
supplier->subscribe(std::bind(&DataProcessor::callback, this));
};
};
Теперь я хочу убедиться, чтоФункция обратного вызова выполняет правильные действия. Я использую gtest для своих тестов и создаю макет IDataSupplier
с gmock, чтобы создать этот объект с.
Я не могу вызвать DataProcessor::callback()
напрямую, поскольку он является закрытым при просмотре из теста. Я бы предпочел не менять DataProcessor
для моего теста.
Обычно обратный вызов доступен, потому что IDataSupplier
имеет доступ к объекту std::function
, который упаковывает приватный метод. Поскольку у меня есть поддельная версия IDataSupplier
, я не думаю, что смогу перехватить полученный ей обратный вызов (и опять же, неправильно полагаться на это; что если gmock перестанет позволять мнеполучить предоставленный std::function
?)
Итак, мои вопросы сводятся к этим двум:
- Я делаю плохую вещь (tm), пытаясь протестировать частный метод обратного вызова?
- Как мне подойти к тестированию этого обратного вызова, если я вообще должен это делать?