Online teszt java belépő szintű. Programteszt, JUnit. Java teszt előfeltételei

Úgy gondolom, hogy a szoftverfejlesztés több, mint egy munka. Kézművesnek látom magam, aki minden nap jobb lenni. Ennek "legegyszerűbb" módja, ha talál néhány jó eszközt, és válaszol a következő kérdésekre:

  • Mikor használjam az X eszközt?
  • Hogyan kell használni az X eszközt?

Az automatizált tesztelés nagyon fontos része a szoftverfejlesztésnek, de a programozói blogokon kevés bejegyzés található a használt eszközökről. Ugyanez a cikk lehetővé teszi, hogy betekintsen az "eszköztáramba". Kitérek 12 könyvtárra és keretrendszerre, amelyeket egység- és integrációs tesztek írásához használok, és hivatkozásokat biztosítok az oldalakra, amelyek segítenek megérteni a használatukat.

Vessünk egy pillantást az eszköztáramba

Az alább ismertetett eszközök használata előtt be kell állítania egy olyan buildet, amely automatikusan futtatja az integrációs és egységteszteket. 2 megjegyzésem van ehhez a témához:

  • A Maven-nel végzett integrációs tesztelés leírja, hogyan állíthatunk be egy Maven buildet integrációval és egységtesztekkel külön könyvtárakban.
  • A Gradle használatának első lépései: A TestSets beépülő modullal végzett integrációs tesztelés ugyanezt írja le a Gradle esetében.

Most készen áll arra, hogy közelebbről is szemügyre vegye eszközeimet. A könnyebb eligazodás érdekében kategóriákra osztottam őket.

Tehát itt van 12 eszköz, amelyet az integrációhoz és az egységtesztekhez használok.

Tesztek futtatása

Az AssertJ rugalmas API-t biztosít hasznos hibaüzeneteket tartalmazó állítások írásához, javítja a tesztkód olvashatóságát, és lehetővé teszi, hogy a teszteket végrehajtható specifikációkká alakítsa, amelyek megfelelnek a kívánt tartományspecifikus nyelvnek.

Ezen kívül:

  • A Hamcrest for Testing használata elmagyarázza, hogyan használhatja a Hamcrestet tesztek írásához, és hogyan bővítheti azt egyéni modulokkal.
  • Az állítások tartományspecifikus nyelvvé alakítása elmagyarázza, hogyan hozhat létre egyéni állításokat az AssertJ-ben.
  • Tiszta tesztek írása: Az állítások helyettesítése tartományspecifikus nyelvvel. Elmagyarázza, miért kell a szabványos JUnit állításokat lecserélnünk a sajátunkra, amelyek a megfelelő tartományspecifikus nyelvet használják.

Adathozzáférési kód tesztelése

Gyors DB, hasznos a futó integrációs tesztek írásához helyi gép fejlesztő.

A JUnit kiterjesztése, amellyel az adatbázis ismert állapotba inicializálható, mielőtt minden egyes integrációs tesztet végrehajtana, és feltöltené az adatbázist a kívánt adatokkal. A DbUnitnak vannak hátrányai, de nagyon hasznos eszköz A, amely lehetővé teszi a tesztadatok és a tesztkód elkülönítését.

Ezen kívül:

  • leírja a DbUnit legfontosabb összetevőit, amelyeket ismernie kell a tesztek DbUnit használatával írásához.
  • öt szabályt ad az adathozzáférési kód legjobb tesztjeinek megírásához.

Java programozók tesztfeladatait keresve egy érdekes oldalra bukkantam (az Avast-felhasználók ne menjenek el, szkriptelt trójai program észlelhető, a többi láthatóan lehetséges) - http://www.betterprogrammer.com. A Java programozók képesítését a legegyszerűbb, de automatikusan: több, egyre bonyolultabb függvény (módszer) írását és a kód TextArea-ba másolását kínálja. Ezután az oldalmotor csinál valamit a feladatokkal (nem más, mint az egységteszt), kiszámít egy bizonyos minősítési indexet a "sebesség-minőség" kritériumok szerint, és ebben a formában adja meg a végső értékelést:

Ezután kezdődnek a kérdések. Jómagam életemben másodszor programoztam Java nyelven (és ezért csak kihagytam az összetett feladatokat), így ezen a teszten 82% megfelel a szintnek nem java programozó. Mennyit kell akkor kapnia a Java Juniornak, a Java Programmernek és még inkább a Java Seniornak? Milyen eredményre számíthatunk ajándék Java programozó - 90, 95, 99? És végül mi van akkor, ha a "programozó" 82-nél kevesebb pontot ér el, de mégis jelentkezik valamilyen állásra?!

A tesztelés nem mindig szórakoztató és érdekes. Ez a folyamat általában meglehetősen hosszadalmas, és néha tele van monoton munkával. Úgy tűnik, hogy nemrég a programozók szabványos kimenetet vagy hibakeresőt használtak a java osztályok tesztelésére.

Ebben a cikkben leírom a JUnit 4 könyvtárat, amely nagyban leegyszerűsíti és automatizálja a tesztírás folyamatát.

A JUnit Framework főbb jellemzőinek bemutatásához írjunk egy primitív osztályt Java nyelven, és gúnyoljuk ki. Ennek az osztálynak két módszere lesz: egy nem-negatív szám faktoriálisának és két szám összegének meghatározása. Ezenkívül az osztálypéldány tartalmazni fog egy metódushívás-számlálót is.

Nyilvános osztály MathFunc ( int hívások; nyilvános int getCalls() ( visszatérő hívások; ) nyilvános hosszú faktoriális (int szám) ( hívások++; if (1) ( for (int i = 1; i

Most pedig írjunk Unit teszteket. Ehhez hozzunk létre egy osztályt számos tesztmódszerrel. Természetesen egy osztály tartalmazhatja a szokásos helper metódusokat is. Annak érdekében, hogy a tesztfutó megállapíthassa, ki kicsoda, a tesztmódszereket a @Test annotációval kell ellátni.

Az annotáció a következő paraméterekkel rendelkezhet:

  • várt - adja meg, hogy melyik kivételt dobja a metódus (lásd az alábbi példát);
  • timeout – ezredmásodpercben mennyi idő elteltével le kell állítani a tesztvégrehajtást, és sikertelennek kell tekinteni.

Ha azt szeretné jelezni, hogy egy bizonyos tesztet ki kell hagyni, akkor kommentálja az @Ignore megjegyzéssel. Bár egyszerűen eltávolíthatja a @Test megjegyzést.

Előfordulhat, hogy az egyes tesztforgatókönyvek végrehajtásához szükség van valamilyen kontextusra, például előre létrehozott osztálypéldányokra. És a végrehajtás után fel kell szabadítania a fenntartott erőforrásokat. Ebben az esetben szüksége lesz a @Before és @After megjegyzésekre. A @Before-val jelölt metódus minden teszteset előtt, egy @After-vel jelölt metódus pedig minden teszteset után kerül végrehajtásra.

Ha az erőforrások inicializálását és felszabadítását csak egyszer kell elvégezni - minden teszt előtt és után -, akkor használjon @BeforeClass és @AfterClass megjegyzéspárt.

És itt van maga a tesztosztály több tesztszkripttel:

Nyilvános osztály MathFuncTest ( privát MathFunc math; @A public void init() előtt ( math = new MathFunc(); ) @After public void tearDown() ( math = null; ) @Test public void calls() ( assertEquals(0, math) .getCalls()); math.factorial(1); assertEquals(1, math.getCalls()); math.factorial(1); assertEquals(2, math.getCalls()); ) @Test public void factorial() ( assertTrue(math.factorial(0) == 1); assertTrue(math.factorial(1) == 1); assertTrue(math.factorial(5) == 120); ) @Test(expected = IllegalArgumentException.class) public void factorialNegative() ( math.factorial(-1); ) @Ignore @Test public void todo() ( assertTrue(math.plus(1, 1) == 3); ) )

A calls metódus a hívásszámláló helyességét teszteli. A faktoriális módszer ellenőrzi, hogy a faktoriális kiszámítása helyes-e bizonyos standard értékekre. A factorialNegative metódus ellenőrzi, hogy a rendszer egy IllegalArgumentException kivételt dobjon a facotrial negatív értékeire. A todo metódust figyelmen kívül hagyja. Fontolja meg az @Ignore megjegyzés eltávolítását a kóddal való kísérletezés során.

Az assertTrue metódus ellenőrzi, hogy egy kifejezés eredménye igaz-e. Néhány egyéb módszer, ami jól jöhet:

  • assertEquals - a várt eredmény és a kapott eredmény megegyezik;
  • assertNull - a kifejezés eredménye null;
  • assertNotNull - a kifejezés eredménye nem null;
  • assertSame - a várt és fogadott objektumok ugyanazok az objektumok.
  • sikertelen - a metódus AssertionError kivételt generál - hozzáadjuk oda, ahol a programvégrehajtás nem érheti el.

Miénkben modern világ Az IDE-k megtalálhatják és könnyen futtathatják a teszteket egy projektben. De mi van akkor, ha manuálisan szeretné futtatni őket programkóddal. Ehhez használhatja a Runner "th. Vannak szöveges - junit.textui.TestRunner, grafikus változatok - junit.swingui.TestRunner, junit.awtui.TestRunner.

De még egy kicsit modern módszer a JUnitCore osztály használata. Adja hozzá a következő fő metódust a MathFuncTest osztályhoz:

Public static void main(String args) kivételt dob ​​( JUnitCore runner = new JUnitCore(); Result result = runner.run(MathFuncTest.class); System.out.println("tesztek futtatása: " + result.getRunCount()); System.out.println("sikertelen tesztek: " + result.getFailureCount()); System.out.println("figyelmen kívül hagyott tesztek: " + result.getIgnoreCount()); System.out.println("siker: " + eredmény .sikeres volt()); )

És a végrehajtás eredménye:

Tesztek futtatása: 3 sikertelen teszt: 0 figyelmen kívül hagyott teszt: 1 sikeres: igaz

A JUnit korábbi verzióiban tesztosztály írásához létre kellett hozni egy junit.framework.TestCase alosztályt. Ezután egy olyan konstruktort kellett definiálni, amely paraméterként vesz egy String-et - a metódus nevét - és átadja a szülőosztálynak. Minden vizsgálati módszernek a teszt előtaggal kellett kezdődnie. A setUp és a tearDown módszereket használták az erőforrások inicializálására és felszabadítására. Röviden: horror. Nos, most már minden egyszerű, igen.

Ez minden mára. Biztos vagyok benne, hogy a JUnit Framework sokat fog segíteni. Várjuk a cikkel kapcsolatos megjegyzéseket és kérdéseket.




Top