Пересмешка - Методы и инструменты
Я самостоятельно изучил gmock и понял его функциональность. Было бы здорово, если бы мы могли посмеяться над некоторыми методами и проверить наш поток.
Теперь моя проблема заключается в том, что у нас есть огромное хранилище кода, которое вызывает много интерфейсов субмодулей для определенного потока - то есть метод базового класса вызывает несколько интерфейсов субмодулей / субмодулей:
bool classA::methodA(uint64_t number) {
if (0 == number) {
return false;
}
Foo* p=&obj;
while (true && (p->*fptr)(number)) {
if (1 == number) {
return true;
} else if (0 == number%2) {
number = number / 2;
} else {
Printer* machine;
char* buff;
PTR pmf[2]= {&B::Copy, &B::Append};
(machine->*pmf[APPEND])(buff, number);
number = 3 * number + 1;
}
}
}
Существуют ли правила метода / механизма / большого пальца, по которым мы можем идентифицировать / знать все методы подмодулей, которые необходимо смоделировать для проверки моего класса на 100% кода?
1 ответ
Здесь нет необходимости в правиле. Вы просто издеваетесь над вещами, которые нужно высмеивать. Ни больше ни меньше.
Имейте в виду: вы пишете модульные тесты с идеей тестировать свой модуль изолированно. Это означает, что вам иногда приходится "вырезать" зависимости, которые есть у вашего модуля, в другом коде.
Теперь давайте предположим, что ваш код использует некоторую зависимость B.
- когда вы можете вызывать свой код, сохраняя реальный B на месте - хорошо. Тогда сделай это.
- когда B либо не работает в настройках модульного теста, либо вам нужно контролировать, что B возвращает в ваш код, - тогда вам нужно подделать.
В этом смысле эмпирическое правило таково: издевайтесь над вещами, если нужно.
Поэтому мы не можем сказать вам, что именно вы должны издеваться. Вместо этого вы должны сделать шаг назад и:
- Прежде всего, поймите, как вы хотите провести модульное тестирование своего кода.
- тогда вы посмотрите на его зависимости
- тогда вы можете экспериментировать, что происходит, когда вы вызываете свой код без каких-либо насмешек
- затем вы делаете свои выводы из данных, собранных предыдущими шагами