dnWalker-project / dnWalker

0 stars 0 forks source link

finished implementation and integration of conditional mocks #64

Closed benjamin-hejl closed 1 year ago

benjamin-hejl commented 1 year ago

Uživatel nyní může nastavit výsledek metod podle predikátu nad argumenty. Zatím to podporuje pouze operace nad primitivními hodnotami, ale neměl by být problém rozšířit i na omezení přes sep logic. Obdobně je to i s návratovou hodnotou. Zatím je ověřená pouze pro primitivní hodnotu (integer), ale je to udělané způsobem, který by měl jít snadno rozšířit i na komplexní struktury.

Princip spočívá v dalším typu member variable a to ConditionalMethodResult. Její paramaetry jsou metoda (IMethod) a podmínka nad jejími argumenty (Expression). V CALLVIRT se pak při volání metody vyzkouší všechny tyto podmínky a to tak, že se proměnné v podmínce nahradí výrazy z konkrétních argumentů metody a konjunkce substituovaného výrazu a aktuální path condition se hodí do solveru. Ta podmínka, která je jako první splněná, tak se zvolí její hodnota a ta se vrátí.

Zbývá už "jenom" toto rozšíření (de)serializovat na XML a v generátoru testů sepsat proceduru, která z formule v separační logice vygeneruje C# predikát (Func<T1, T2, ...., bool>).