Kezdőoldal » Számítástechnika » Programozás » C#-ban való Unit tesztelés...

C#-ban való Unit tesztelés során a Substituted osztályban lévő változó miért nem változik?

Figyelt kérdés

Létrehoztam a tesztelés során egy osztályt pl. így:

randomclass instance = Substitute.For<randomclass>();

Az osztályban van mondjuk egy publikus int típusú változó, aminek alapból 100 az értéke (példányosítás során adjuk meg) és egy publikus függvény, amit ha meghívunk, kivonódik egy (1) a változó értékéből.


Tesztelés során mondjuk azt akarom tesztelni, hogy ha 10x meghívjuk azt az adott függvényt, akkor a változó értéke 90 lesz. (Assert.That(instance.Valtozo, Is.EqualTo(90))) A teszt lefut, de sikertelen, mert nem egyezik 90-nel, hanem ugyanúgy 100, tehát a változóból nem vonódott ki 1 egyszer sem. Ez miért van? Ha az osztályt úgy példányosítom tesztelés során, hogy randomclass instance = new randomclass();, akkor kivonódik és működik, de Substitute.For esetén (amire nálam szükség van) nem. Valaki tudja esetleg, hogy ez miért lehet?



2015. jan. 27. 20:23
 1/2 A kérdező kommentje:
Oké. Arra már rájöttem, hogy valami köze van hozzá annak, hogy a függvény, amit meghívok, egy szülő osztályban lett létrehozva virtual függvényként. Ez miért jelent gondot?
2015. jan. 27. 20:43
 2/2 anonim ***** válasza:

Nem értem mit akarsz elérni. NSubstitute egy mocking library. Pont az a lényege hogy ne fusson le a kód. Interface-ekkel szokás használni mert ott nincs futtatható kód, de ha rákényszerülnél hogy osztállyal használd akkor a virtuális metódusok nem fognak lefutni, hiszen a mock objektumod leszármazottja lesz az eredetinek, a virtuális függvények pedig a fizikai példányra fognak mutatni, ellenben a nem virtuális függvényekkel ami lefutnak sajnos.


De szerintem nem tudod hogy mire jó ez az egész, mert amit írsz, annak semmi értelme. Amikor tesztelni akarsz egy osztályt, és az az osztály függ pár másik osztálytól, akkor ha hibás értéket kapsz vissza a tesztben, nem tudod hogy a tesztelt osztály, vagy a függőségei működnek rosszul. Ezért szét akarod választani a tesztelendő osztályodat a függőségeitől, és itt jön a képbe a mockolás.


A függőséget helyettesíted (substitute) egy mock osztállyal ami nem lefut, hanem te tudod vezérelni és pontosan azt adja vissza amit előre beállítasz neki, mást nem csinál. Így tudod leválasztani a függőségeket és ténylegesen azt az osztályt teszteled amit tesztelni akarsz. Éppen ezért nem szabad osztály-t mockolni, mert nincs felette teljes vezérlésed, vannak kódok amik lefutnak benne, vannak amik nem, és nem rajtad múlik.

2015. jan. 28. 11:39
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!