Autor: | Miroslav Beneš |
---|---|
Organizace: | Katedra informatiky FEI VŠB-TU Ostrava |
Popis: | Na ukázkovém příkladu si vyzkoušíte práci se soubory s přímým přístupem a naučíte se vytvářet sady testů pro systematické testování v prostředí JUnit. |
Pokud chceme umožnit přímý přístup ke konkrétnímu záznamu v souboru, je vhodné zajistit, aby všechny zapisované záznamy měly pevnou délku. Pro přístup k n-tému záznamu pak stačí pozici v souboru nastavit na příslušný násobek délky jednoho záznamu.
Třída RandomAccessFile umožňuje přímý zápis binárních hodnot do souboru a jejich čtení. Řetězce se ovšem zapisují ve své skutečné délce, a proto je třeba zajistit jejich doplnění na definovanou šířku (případně zkrácení) např. mezerami zprava. Tyto mezery se pak odříznou při čtení metodou trim().
Třída Predmet umožňuje také čtení a zápis záznamu se zadaným pořadovým číslem a zjištění počtu záznamů v souboru. Při těchto operacích se vychází ze znalosti délky jednoho záznamu v souboru (konstanta DELKA_ZAZNAMU). Metodou seek() je nejprve nastavena pozice v souboru na zadaný záznam a pak se teprve provede čtení nebo zázpis záznamu.
Povšimněte si také obsahu funkce main() - tato funkce vytvoří instanci třídy, ve které se nachází (v tomto případě třídy Priklad1), a potom spustí její metodu run(), která plní funkci hlavního programu. Nemusíme pak všechny proměnné a metody označovat klíčovým slovem static. Navíc se tento postup hodí tehdy, pokud hlavní třída programu má být odvozená od některé již definované třídy, což je běžné například u aplikací s grafickým uživatelským rozhraním.
Třídy: Predmet, Priklad1
Tyto testy by měly být spustitelné přímo z prostředí JBuilder, případně voláním "ant junit". Pokud program Ant nenajde soubor junit.jar, je třeba nastavit proměnnou prostředí CLASSPATH tak, aby tento soubor obsahovala, případně umístit soubor junit.jar do adresáře lib programu Ant. Podívejte se také na obsah souboru build.xml, v němž je úloha junit definovaná - v případě nejasností nahlédněte do dokumentace k programu Ant.
Třída TestPredmet provádí jednoduché testy jednotlivých get/set metod třídy Predmet a byla z velké části vygenerována přímo prostředím JBuilder 9. Třída TestPredmetIO testuje metody třídy Predmet pracující se soubory.
Vyzkoušejte si také chování programu junit v situaci, kdy některý test neprojde. Změňte například očekávanou hodnotu v testu některé metody get.
Třídy: Predmet, TestPredmet, TestPredmetIO
Doplňte další testy pro operaci násobení zlomků a pro porovnání zlomků (rozhraní Comparable a Comparator). V případě, že vaše implementace zlomků nebude některou testovanou podmínku splňovat, opravte ji. Zamyslete se nad tím, jak by se měla třída Zlomek chovat v případě, že je jmenovatel nulový. Doplňte testy, které budou očekávané chování ověřovat.