Egységtesztek olvashatóságának nyomában

Posted by | · · | Egy csésze kávé · Szoftverfejlesztés | Nincs hozzászólás a(z) Egységtesztek olvashatóságának nyomában bejegyzéshez

Korábban már igyekeztem összeszedni, hogy mi is tesz ki egy “jó egységtesztet”. Ezen blogbejegyzés fókusza az volt, hogy mikre figyeljünk egységteszt írás közben, milyen figyelmeztető jelek vannak arra, hogy “nem jó a tesztünk”. Többek közt említést tettem arról is, hogy törekedjünk az olvashatóságra és jelen blogbejegyzésben ezzel foglalkoznék.

 

Nem törekszem teljességre, inkább csak ízelítőt szeretnék adni arra, hogy Java-ban a JUnit és a Mockito framework-öket használva hogyan növelhetjük a tesztjeink olvashatóságát.

Használjuk az assertThat() metódust az assertEquals() helyett

Az assertThat() kialakítása olyan, hogy olvashatóbb assert-et kapjunk. A JUnit wiki-jében ezt olvashatjuk:

More readable and typeable: this syntax allows you to think in terms of subject, verb, object (assert “x is 3”) rather than assertEquals, which uses verb, object, subject (assert “equals 3 x”)

JUnit: Matchers and assertThat

@InjectMocks és @Mock

A Mockito ad néhány annotációt, amelyeket akkor tudunk alkalmazni, ha a MockitoJUnitRunner.class runner-t használjuk.

A @Mock annotációval ellátott tesztosztály változói a teszt futtatáskor mockolt objektumok lesznek és a @InjectMocks pedig az így létrehozott mock objektumokat állítja be az általa megjelölt osztály példányon.

Ezzel a két annotációval könnyen átláthatóvá válik a teszt osztály: látszik melyik osztályt teszteljük és annak mik a függőségei.

“when thenReturn”

Mock objektumok eltérő bemeneti paraméterekre képesek eltérő kimeneti értékeket adni. A when(…).thenReturn(…) metódus lánc használható visszatérési értékek meghatározására, előre megadott paraméterek esetén.

A thenReturn mellett vannak más then metódusok is: thenThrow(), thenAnswer(), thenCallRealMethod().

Végszó

Ezek mellett a 3A (Arrange-Act-Assert) patternt is mindenki figyelmébe ajánlom.

Share on FacebookShare on Google+Email this to someoneTweet about this on TwitterShare on RedditShare on LinkedIn

No Comments

Leave a comment