#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)
, вы можете просто выполнить серию прямых вызовов с любыми предопределенными постоянными аргументами.