Online test vstupnej úrovne Java. Testovanie programu, JUnit. Požiadavky na test Java

Verím, že vývoj softvéru je viac ako len práca. Vnímam sa ako remeselník, ktorý sa snaží byť každým dňom lepší. „Najjednoduchší“ spôsob, ako to urobiť, je nájsť dobré nástroje a odpovedať na nasledujúce otázky:

  • Kedy by som mal použiť nástroj X?
  • Ako mám používať nástroj X?

Automatizované testovanie je veľmi dôležitou súčasťou vývoja softvéru, no na blogoch programátorov je málo príspevkov o používaných nástrojoch. Rovnaký článok vám umožní nahliadnuť do môjho „boxu nástrojov“. Pokryjem 12 knižníc a rámcov, ktoré používam na písanie jednotkových a integračných testov, a poskytnem odkazy na stránky, ktoré vám pomôžu pochopiť, ako ich používať.

Poďme sa pozrieť do mojej skrinky s nástrojmi

Skôr ako budete môcť použiť nástroje popísané nižšie, musíte nastaviť zostavu, ktorá automaticky spustí integračné a jednotkové testy. K tejto téme mám 2 poznámky:

  • Testovanie integrácie s Maven popisuje, ako môžeme nastaviť zostavu Maven s integračnými a jednotkovými testami v samostatných adresároch.
  • Začíname s Gradle: Testovanie integrácie s doplnkom TestSets popisuje to isté pre Gradle.

Teraz ste pripravení pozrieť sa bližšie na moje nástroje. Rozdelil som ich do kategórií, aby ste sa v nich ľahšie orientovali.

Takže tu je 12 nástrojov, ktoré používam na integráciu a testovanie jednotiek.

Prebiehajúce testy

AssertJ poskytuje flexibilné API na písanie tvrdení s užitočnými chybovými hláseniami, zlepšuje čitateľnosť testovacieho kódu a umožňuje premeniť testy na spustiteľné špecifikácie, ktoré zodpovedajú požadovanému jazyku špecifickému pre doménu.

Okrem toho:

  • Používanie Hamcrestu na testovanie vysvetľuje, ako používať Hamcrest na písanie testov a ako ho rozšíriť o vlastné moduly.
  • Premena tvrdení na jazyk špecifický pre doménu vysvetľuje, ako vytvoriť vlastné tvrdenia v AssertJ.
  • Písanie čistých testov: Nahradenie tvrdení jazykom špecifickým pre doménu. Vysvetľuje, prečo by sme mali nahradiť štandardné tvrdenia JUnit našimi vlastnými, ktoré používajú správny jazyk špecifický pre doménu.

Testovanie prístupového kódu k údajom

Rýchla databáza, užitočná na písanie integračných testov, ktoré bežia lokálny stroj vývojár.

Rozšírenie JUnit, ktoré možno použiť na inicializáciu databázy do známeho stavu pred vykonaním každého integračného testu a naplnením databázy požadovanými údajmi. DbUnit má svoje nevýhody, ale je to veľmi užitočný nástroj A, ktoré vám umožňuje oddeliť testovacie údaje a testovací kód.

Okrem toho:

  • popisuje kľúčové komponenty DbUnit, ktoré potrebujete poznať na písanie testov pomocou DbUnit.
  • poskytuje päť pravidiel na písanie najlepších testov kódu na prístup k údajom.

Pri hľadaní testovacích úloh pre programátorov java som narazil na zaujímavú stránku (používatelia Avastu by nemali ísť, je detekovaný skriptovaný trójsky kôň, zvyšok zrejme môže) - http://www.betterprogrammer.com. Preveruje kvalifikáciu Java programátorov s najjednoduchším, ale automaticky: ponuka napísať niekoľko funkcií (metód) zvyšujúcej sa zložitosti a skopírovať kód do TextArea. Potom nástroj lokality urobí niečo s úlohami (okrem testovania jednotiek), vypočíta určitý kvalifikačný index podľa kritérií „rýchlosti a kvality“ a poskytne konečné hodnotenie v tejto forme:

Potom začnú otázky. Ja sám som programoval v Jave druhýkrát v živote (a preto som komplexné úlohy len preskočil), takže 82% z tohto testu zodpovedá úrovni nejava programátor. Koľko by potom mal dostať Java Junior, Java Programmer a ešte viac Java Senior? Od akého výsledku očakávať prítomný java programátor - 90, 95, 99? A napokon, čo ak „programátor“ dosiahne menej ako 82, no napriek tomu sa uchádza o nejakú prácu?!

Testovanie nie je vždy zábavné a zaujímavé. Tento proces je zvyčajne dosť zdĺhavý a niekedy plný monotónnej práce. Zdá sa, že nedávno programátori používali štandardný výstup alebo debugger na testovanie tried java.

V tomto článku popíšem knižnicu JUnit 4, ktorá značne zjednodušuje a automatizuje proces písania testov.

Aby sme demonštrovali hlavné črty JUnit Frameworku, napíšme primitívnu triedu v Jave a zosmiešnime ju. Táto trieda bude mať dve metódy – nájdenie faktoriálu nezáporného čísla a súčet dvoch čísel. Okrem toho bude inštancia triedy obsahovať počítadlo volaní metódy.

Verejná trieda MathFunc ( volania int; public int getCalls() ( spätné volania; ) public long factorial (int number) ( calls++; if (číslo 1) ( for (int i = 1; i

Teraz napíšeme Unit testy. Aby sme to dosiahli, vytvorme triedu s množstvom testovacích metód. Prirodzene, trieda môže obsahovať aj obvyklé pomocné metódy. Aby mohol testovací bežec určiť, kto je kto, testovacie metódy musia byť označené anotáciou @Test.

Anotácia môže mať nasledujúce parametre:

  • očakávané - špecifikujte, ktorá výnimka bude vyvolaná metódou (pozri príklad nižšie);
  • timeout - po akom čase v milisekundách sa má vykonávanie testu zastaviť a počítať ako neúspešné.

Ak chcete naznačiť, že určitý test by sa mal preskočiť, označte ho anotáciou @Ignore. Aj keď môžete anotáciu @Test jednoducho odstrániť.

Stáva sa, že na vykonanie každého testovacieho scenára potrebujete určitý kontext, napríklad vopred vytvorené inštancie triedy. A po vykonaní musíte uvoľniť rezervované zdroje. V tomto prípade budete potrebovať anotácie @Pred a @Po. Metóda označená @Before sa vykoná pred každým testovacím prípadom a metóda označená @After sa vykoná po každom testovacom prípade.

Ak je potrebné inicializáciu a uvoľnenie prostriedkov vykonať iba raz – pred a po všetkých testoch – potom použite dvojicu anotácií @BeforeClass a @AfterClass.

A tu je samotná testovacia trieda s niekoľkými testovacími skriptami:

Verejná trieda MathFuncTest ( private MathFunc math; @Before public void init() ( math = new MathFunc(); ) @After public void tearDown() (math = null; ) @Test public void calls() (assertEquals(0, math) () ( tvrdiťPravda(math.factorial(0) == 1); tvrdiťPravda(1) == 1); tvrdiťTrue(math.factorial(5) == 120); ) @Test(očakávané = IllegalArgumentException.class) public void factorialNegative() ( math.factorial(-1); ) @Ignore @Test public void todo() (assertTrue(math.plus(1, 1) == 3); ) )

Metóda hovorov testuje správnosť počítadla hovorov. Faktoriálna metóda kontroluje, či je faktoriál vypočítaný správne pre niektoré štandardné hodnoty. Metóda factorialNegative skontroluje, či sa pri záporných hodnotách fakotriálu vyvolá výnimka IllegalArgumentException. Metóda úlohy bude ignorovaná. Pri experimentovaní s kódom zvážte odstránenie anotácie @Ignore.

Metóda serveTrue kontroluje, či je výsledok výrazu pravdivý. Niektoré ďalšie metódy, ktoré sa môžu hodiť:

  • claimEquals - očakávaný výsledok a prijatý výsledok sú rovnaké;
  • ssesNull - výsledok výrazu je null;
  • claimNotNull - výsledok výrazu nie je null;
  • ssesSame - očakávané a prijaté objekty sú rovnaký objekt.
  • fail - metóda vygeneruje výnimku AssertionError - pridáme ju tam, kde by spustenie programu nemalo dosiahnuť.

V našom modernom svete IDE môžu nájsť a jednoducho spustiť testy v projekte. Ale čo keď ich chcete spustiť manuálne pomocou programového kódu. Na to môžete použiť Runner "th. Existujú textové - junit.textui.TestRunner, grafické verzie - junit.swingui.TestRunner, junit.awtui.TestRunner.

Ale trochu viac moderná metóda je použitie triedy JUnitCore. Pridajte nasledujúcu hlavnú metódu do triedy MathFuncTest:

Public static void main(String args) vyvolá výnimku ( JUnitCore runner = new JUnitCore(); Výsledok výsledku = runner.run(MathFuncTest.class); System.out.println("spustiť testy: " + result.getRunCount()); System.out.println("neúspešné testy: " + výsledok.getFailureCount()); System.out.println("ignorované testy: " + výsledok.getIgnoreCount()); System.out.println("úspech: " + výsledok .bol úspešný()); )

A výsledok vykonania:

Spustiť testy: 3 neúspešné testy: 0 ignorovaných testov: 1 úspech: pravda

Vo viac skoré verzie JUnit na napísanie testovacej triedy bolo potrebné vytvoriť nástupcu junit.framework.TestCase. Potom bolo potrebné definovať konštruktor, ktorý berie ako parameter String – názov metódy – a odovzdať ho nadradenej triede. Každá testovacia metóda musela začínať testovacou predponou. Na inicializáciu a uvoľnenie prostriedkov sa použili metódy setUp a tearDown. Skrátka hrôza. Teraz je všetko jednoduché, áno.

To je na dnes všetko. Som si istý, že JUnit Framework vám veľmi pomôže. Komentáre a otázky k článku sú vítané.




Hore