Искам да тествам алгоритъм, използвайки фалшиви. Алгоритъмът - в текущата реализация - итерира над клас контейнер в множество преминавания и set()s и get()s стойности от него. Целта на теста е да провери крайния резултат, записан в контейнера. Крайната стойност зависи от стойностите, прочетени и записани между преминаванията. напр. стойността на всеки елемент може да се променя многократно, докато алгоритъмът приключи и най-вероятно стойността му като резултат от итерация n ще зависи от стойността му след итерация n-1.
Харесва ми идеята за подигравки и бих искал да ги използвам в описания по-горе сценарий, тъй като това ще ми позволи да проверя грешното поведение на алгоритъма, след като то се появи, а не само когато изчислението приключи. Не съм сигурен обаче дали това всъщност би било добра идея, защото тогава ще трябва да свържа очакванията за макета наистина близо до текущата реализация (напр. „очаквайте get(element n) и върнете x, след това set( елемент n, стойност x+1), друго get(n) и връщане на x+1, след това очаквайте set(n, x+2) и т.н.").
Въпреки че ми позволява да проверя дали междинните стойности са според очакванията, мисля, че подобни очаквания биха противоречали на целта на теста (проверете дали алгоритъмът изчислява правилната крайна стойност) и вероятно тестът ще се провали, ако внедряването се промени, независимо от коректността на крайната стойност.
Сега въпросът ми: пропускам ли нещо? Има ли все пак добър начин да се използват подигравки в този сценарий? или просто няма смисъл да ги използвам тук? Как другите се справят с този проблем?
Последна забележка: Говоря за тестване на c++ код и използване на googlemock, ако това има значение за вашия отговор.
p.s.: Проверих google и статии тук (особено подигравателно итеративно поведение - справя се само с проблема с увеличаване на възвръщаемостта стойност), обаче не намерих нищо близко до моя проблем.