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