Как смоделировать оператор на основе диапазона с помощью gmock?

#c 11 #googlemock

#c 11 #googlemock

Вопрос:

У меня есть класс, который наследуется от std::map

 class LeMap : public std::map<int,int>
{
  ...
};
  

У меня есть другой класс, который должен перебирать свои элементы:

 class LeMapUser {
  LeMap mMap;
  public:
  void printElements()
  { 
    for( autoamp; element : mMap ) { whatever(element); }
  }
  private:
  void whatever(int element){ ... }
};
  

Возможно ли смоделировать, LeMap чтобы протестировать whatever , используя gmock?
Кратко: какой оператор я должен перегрузить для выполнения цикла?

Ответ №1:

AFAIK for циклу на основе диапазона требуется, чтобы у mMap объекта был begin() элемент, который возвращает итератор. Итератор должен иметь оператор постинкрементного перехода, чтобы перемещаться по диапазону. Кроме того, mMap должен иметь end() элемент, возвращающий значение, сопоставимое с итератором (но не обязательно являющийся самим итератором).

Комментарии:

1. Спасибо. Насколько я понял, не так просто сделать то, что я хочу, но на самом деле это не обязательно: можно переработать методы, чтобы протестировать вызовы на отдельных объектах вместо тестирования самого цикла

2. @HAL9000 Да, конечно. Я понял, что вы хотите протестировать итерацию по карте и смоделировать эту карту, но сохранить итерацию. Однако, если вы хотите протестировать whatever(int) , вы можете просто выполнить серию прямых вызовов с любыми предопределенными постоянными аргументами.