Vyhlásenia o jarnom potvrdení
1. Prehľad
V tomto tutoriáli sa zameriame a popíšeme účel jari Tvrdiť triedy a predviesť, ako ju používať.
2. Účel Tvrdiť Trieda
Pružina Tvrdiť trieda nám pomáha overiť argumenty. Použitím metód z Tvrdiť triedy, môžeme napísať predpoklady, o ktorých si myslíme, že sú pravdivé. A ak nie sú splnené, vyvolá sa runtime výnimka.
Každý TvrdiťMetóda sa dá porovnať s Java tvrdiť vyhlásenie. Java tvrdiť vyhlásenie hodí Chyba za behu, ak zlyhá jeho stav. Zaujímavosťou je, že tieto tvrdenia je možné deaktivovať.
Tu je niekoľko charakteristík jari TvrdiťMetódy:
- TvrdiťMetódy sú statické
- Hodia buď IllegalArgumentException alebo IllegalStateException
- Prvý parameter je zvyčajne argument na overenie alebo logická podmienka na kontrolu
- Posledným parametrom je zvyčajne správa o výnimke, ktorá sa zobrazí, ak sa overenie nepodarí
- Správu je možné odovzdať buď ako a String parameter alebo ako a Dodávateľ parameter
Upozorňujeme tiež, že napriek podobnému názvu nemajú jarné tvrdenia nič spoločné s tvrdeniami JUnit a iných testovacích rámcov. Jarné tvrdenia nie sú na testovanie, ale na ladenie.
3. Príklad použitia
Definujme a Auto triedy verejnou metódou jazda ():
public class Car {private String state = "stop"; public void drive (int speed) {Assert.isTrue (rýchlosť> 0, „rýchlosť musí byť kladná“); this.state = "disk"; // ...}}
Vidíme, ako rýchlosť musí byť kladné číslo. Vyššie uvedený riadok predstavuje krátku cestu na kontrolu stavu a vyvolanie výnimky, ak stav zlyhá:
if (! (rýchlosť> 0)) {hodiť novú IllegalArgumentException ("rýchlosť musí byť kladná"); }
Každý TvrdiťVerejná metóda obsahuje zhruba tento kód - podmienený blok s runtime výnimkou, z ktorej sa neočakáva zotavenie aplikácie.
Ak sa pokúsime dovolať jazda () metóda so záporným argumentom, an IllegalArgumentException bude vyvolaná výnimka:
Výnimka vo vlákne „main“ java.lang.IllegalArgumentException: rýchlosť musí byť kladná
4. Logické tvrdenia
4.1. je pravda()
Toto tvrdenie bolo diskutované vyššie. Prijíma a boolovský stav a hodí an IllegalArgumentException keď je podmienka nepravdivá.
4.2. štát()
The štát() metóda má rovnaký podpis ako je pravda() ale hodí IllegalStateException.
Ako už názov napovedá, mal by sa použiť, keď v metóde nesmie pokračovať kvôli nelegálnemu stavu objektu.
Predstavte si, že nemôžeme volať palivo () metóda, ak je auto v prevádzke. Použime štát() tvrdenie v tomto prípade:
public void fuel () {Assert.state (this.state.equals ("stop"), "auto musí byť zastavené"); // ...}
Samozrejme, všetko môžeme overiť pomocou logických tvrdení. Pre lepšiu čitateľnosť však môžeme použiť ďalšie tvrdenia, vďaka ktorým je náš kód expresívnejší.
5. Assertio objektu a typuns
5.1. notNull ()
Môžeme predpokladať, že objekt nie je nulový pomocou notNull () metóda:
public void сhangeOil (reťazcový olej) {Assert.notNull (olej, „olej nesmie byť null“); // ...}
5.2. isNull ()
Na druhej strane môžeme skontrolovať, či nejaký predmet je nulový pomocou isNull () metóda:
public void replaceBattery (CarBattery carBattery) {Assert.isNull (carBattery.getCharge (), "pri výmene batérie musí byť nabitie nulové"); // ...}
5.3. isInstanceOf ()
Na kontrolu, či je objekt inštanciou iného objektu konkrétneho typu, môžeme použiť znak isInstanceOf () metóda:
public void сhangeEngine (motor motora) {Assert.isInstanceOf (ToyotaEngine.class, motor); // ...}
V našom príklade kontrola úspešne prešla ako ToyotaEngine je podtrieda Motor.
5.4. isAssignable ()
Na kontrolu typov môžeme použiť Assert.isAssignable ():
public void repairEngine (motor motora) {Assert.isAssignable (Engine.class, ToyotaEngine.class); // ...}
Dve nedávne tvrdenia predstavujú je-a vzťah.
6. Textové tvrdenia
Na vykonanie kontroly sa používajú textové tvrdenia String argumenty.
6.1. hasLength ()
Môžeme skontrolovať, či a String nie je prázdny, čo znamená, že obsahuje najmenej jeden prázdny priestor pomocou znaku hasLength () metóda:
public void startWithHasLength (reťazcový kľúč) {Assert.hasLength (kľúč, „kľúč nesmie mať hodnotu null a nesmie byť prázdny“); // ...}
6.2. hasText ()
Môžeme posilniť stav a skontrolovať, či a String obsahuje najmenej jeden znak, ktorý nie je prázdny, pomocou znaku hasText () metóda:
public void startWithHasText (reťazcový kľúč) {Assert.hasText (kľúč, „kľúč nesmie mať hodnotu null a musí obsahovať aspoň jeden znak bez medzier“); // ...}
6.3. neobsahuje()
Môžeme určiť, či a String argument neobsahuje konkrétny podreťazec pomocou znaku neobsahuje() metóda:
public void startWithNotContain (reťazcový kľúč) {Assert.doesNotContain (kľúč, „123“, „kľúč nesmie obsahovať 123“); // ...}
7. Zbierka a výroky na mape
7.1. nie prázdny() pre zbierky
Ako hovorí názov, nie prázdny() metóda tvrdí, že kolekcia nie je prázdna, to znamená, že nie je nulový a obsahuje najmenej jeden prvok:
public void repair (Collection repairParts) {Assert.notEmpty (repairParts, „zbierka repairParts nesmie byť prázdna“); // ...}
7.2. nie prázdny() pre Mapy
Rovnaká metóda je preťažená pre mapy a môžeme skontrolovať, či mapa nie je prázdna a obsahuje aspoň jednu položku:
public void repair (Map repairParts) {Assert.notEmpty (repairParts, „mapa repairParts nesmie byť prázdna“); // ...}
8. Tvrdenia poľa
8.1. nie prázdny() pre polia
Nakoniec môžeme skontrolovať, či pole nie je prázdne a obsahuje aspoň jeden prvok pomocou znaku nie prázdny() metóda:
public void repair (String [] repairParts) {Assert.notEmpty (repairParts, "pole repairParts nesmie byť prázdne"); // ...}
8.2. noNullElements ()
Môžeme overiť, či pole neobsahuje nulový prvkov pomocou noNullElements () metóda:
public void repairWithNoNull (String [] repairParts) {Assert.noNullElements (repairParts, "pole repairParts nesmie obsahovať nulové prvky"); // ...}
Upozorňujeme, že táto kontrola stále prebieha, ak je pole prázdne, pokiaľ neexistujú žiadne nulový prvky v ňom.
9. Záver
V tomto článku sme preskúmali Tvrdiť trieda. Táto trieda je široko používaná v rámci Spring, ale mohli by sme ľahko napísať robustnejší a expresívnejší kód, ktorý by to využil.
Kompletný kód tohto článku nájdete ako vždy v projekte GitHub.