Тестирующий итерационный код с использованием издеваний - имеет смысл ли он смысл, как?

Я хочу проверить алгоритм, используя издевательства. Алгоритм - в текущей реализации - итерации по поводу класса контейнеров в нескольких проходах и значениях () S и Get () S нее. Цель теста состоит в том, чтобы проверить окончательный результат, сохраненный в контейнере. Окончательное значение зависит от значений, прочитанных и записанных между пропусками. например Значение любого элемента может измениться несколько раз, пока алгоритм не закончен и, скорее всего, его значение в результате итерации n будет зависеть от его значения после итерации N-1.

Мне нравится идея издеваний, и я хотел бы использовать их в сценарии, описанном выше, поскольку она позволила бы мне проверить ошибочное поведение алгоритма, как только оно происходит, не только при завершении вычислений. Тем не менее, я не уверен, на самом деле будет хорошей идеей, потому что мне тогда придется связать ожидания для издевания, близкого к текущему осуществлению (например, «ждать Get (Element N) и возврат x, затем установить ( Элемент n, значение x + 1), другой get (n) и return x + 1, затем ожидайте набор (n, x + 2) и т. Д. ").

Несмотря на то, что позволяя мне проверить, что промежуточные значения, как и ожидалось, я думаю, что такие ожидания противоречат цели теста (убедитесь, что алгоритм вычисляет правильное конечное значение), и вероятно, что тест не пройдет неудачника, если реализация изменяется независимо от правильность конечной стоимости.

Теперь мой вопрос: я что-то упускаю? Тем не менее хороший способ использовать издевательства в этом сценарии? Или это просто не имеет смысла использовать их здесь? Как другие справляются с этой проблемой?

Последнее замечание: Я говорю о тестировании кода C ++ и используя Googlemock, если это имеет значение для вашего ответа.

P.S.: Я проверил Google и статьи здесь (особенно издевательства итеративное поведение - только решает проблему увеличения возвращаемого значения), однако я не нашел ничего близко к моей проблеме.

5
задан Community 23 May 2017 в 12:19
поделиться