Я хочу протестировать алгоритм с помощью макетов. Алгоритм — в текущей реализации — перебирает класс контейнера за несколько проходов и значения set() и get() из него. Цель теста — проверить окончательный результат, хранящийся в контейнере. Окончательное значение зависит от значений, прочитанных и записанных между проходами. например значение любого элемента может измениться многократно, пока алгоритм не завершится, и, скорее всего, его значение в результате итерации n будет зависеть от его значения после итерации n-1.
Мне нравится идея моков, и я хотел бы использовать их в описанном выше сценарии, поскольку это позволило бы мне проверять ошибочное поведение алгоритма, когда оно происходит, а не только после завершения вычислений. Тем не менее, я не уверен, будет ли это на самом деле хорошей идеей, потому что тогда мне придется связать ожидания для фиктивного реального с текущей реализацией (например, «ожидать получить (элемент n) и вернуть x, затем установить ( элемент n, значение x+1), еще один get(n) и return x+1, затем ожидайте set(n, x+2) и т.д.").
Хотя это позволяет мне проверить, что промежуточные значения соответствуют ожидаемым, я думаю, что такие ожидания будут противоречить цели теста (проверка того, что алгоритм вычисляет правильное конечное значение) и, вероятно, тест завершится неудачно, если реализация изменится, независимо от правильности конечное значение.
Теперь мой вопрос: я что-то упустил? Тем не менее, есть ли хороший способ использовать макеты в этом сценарии? или просто нет смысла их здесь использовать? Как другие справляются с этой проблемой?
Последнее замечание: я говорю о тестировании кода С++ и использовании googlemock, если это имеет какое-либо значение для вашего ответа.
ps: я проверил google и статьи здесь (особенно насмешка итеративного поведения - решает только проблему увеличения возврата value), однако я не нашел ничего близкого к моей проблеме.