Vodič za preduvjete Guave

1. Pregled

U ovom uputstvu pokazat ćemo kako koristiti Google Guava Preduvjeti razred.

The Preduvjeti class pruža popis statičkih metoda za provjeru poziva li se metoda ili konstruktor s važećim vrijednostima parametara. Ako preduvjet ne uspije, izbacuje se prilagođena iznimka.

2. Google Guava Preduvjeti

Svaka statička metoda u Preduvjeti razred ima tri varijante:

  • Bez argumenata. Iznimke se izbacuju bez poruke o pogrešci
  • Dodatak Objekt argument koji djeluje kao poruka o pogrešci. Iznimke se pojavljuju s porukom pogreške
  • Dodatni argument String, s proizvoljnim brojem dodatnih Objekt argumenti koji djeluju kao poruka o pogrešci s rezerviranim mjestom. Ovo se pomalo ponaša printf, ali za kompatibilnost i učinkovitost GWT-a to dopušta samo % s pokazatelji

Pogledajmo kako koristiti Preduvjeti razred.

2.1. Ovisnost Mavena

Počnimo s dodavanjem Googleove ovisnosti o knjižnici Guava u pom.xml:

 com.google.guava guava 29,0-jre 

Najnoviju verziju ovisnosti možete provjeriti ovdje.

3. checkArgument

The metoda checkArgument od Preduvjeti razred osigurava istinitost parametara proslijeđenih pozivajućoj metodi. Ova metoda prihvaća logički uvjet i baca IlegalArgumentException kad je stanje lažno.

Pogledajmo kako možemo koristiti ovu metodu s nekoliko primjera.

3.1. Bez poruke o pogrešci

Možemo koristiti checkArgument bez prosljeđivanja bilo kakvog dodatnog parametra u checkArgument metoda:

@Test public void whenCheckArgumentEvaluatesFalse_throwsException () {int age = -18; assertThatThrownBy (() -> Preduvjeti.checkArgument (dob> 0)) .isInstanceOf (IllegalArgumentException.class) .hasMessage (null) .hasNoCause (); }

3.2. S porukom o pogrešci

Značajnu poruku o pogrešci možemo dobiti od checkArgument metoda prosljeđivanjem poruke o pogrešci:

@Test javna praznina givenErrorMsg_whenCheckArgEvalsFalse_throwsException () {int age = -18; String message = "Dob ne može biti nula ili manja od nule."; assertThatThrownBy (() -> Preconditions.checkArgument (dob> 0, poruka)) .isInstanceOf (IllegalArgumentException.class) .hasMessage (message) .hasNoCause (); }

3.3. S porukom o pogrešci predloška

Značajnu poruku o pogrešci možemo dobiti zajedno s dinamičkim podacima iz checkArgument metoda prosljeđivanjem poruke o pogrešci:

@Test javna praznina givenTemplateMsg_whenCheckArgEvalsFalse_throwsException () {int age = -18; String message = "Dob bi trebala biti pozitivan broj, dali ste% s."; assertThatThrownBy (() -> Preconditions.checkArgument (dob> 0, poruka, dob)) .isInstanceOf (IllegalArgumentException.class) .hasMessage (message, age) .hasNoCause (); } 

4. checkElementIndex

Metoda checkElementIndex provjerava je li indeks važeći indeks na popisu, nizu ili nizu određene veličine. Indeks elemenata može se kretati od 0 uključivo do isključive veličine. Popis, niz ili niz ne prosljeđujete izravno, već samo njegovu veličinu. Ova metoda baca IndexOutOfBoundsException ako indeks nije valjani indeks elementa, u suprotnom vraća indeks koji se prosljeđuje metodi.

Pogledajmo kako možemo koristiti ovu metodu prikazujući značajnu poruku o pogrešci iz checkElementIndex metoda prosljeđivanjem poruke o pogrešci kada izbaci iznimku:

@Test javna praznina givenArrayAndMsg_whenCheckElementEvalsFalse_throwsException () {int [] brojevi = {1, 2, 3, 4, 5}; String message = "Molimo provjerite vezu niza i pokušajte ponovo"; assertThatThrownBy (() -> Preconditions.checkElementIndex (6, numbers.length - 1, poruka)) .isInstanceOf (IndexOutOfBoundsException.class) .hasMessageStartingWith (poruka) .hasNoCause (); }

5. checkNotNull

Metoda checkNotNull provjerava je li vrijednost navedena kao parametar null. Vraća provjerenu vrijednost. Ako je vrijednost koja je proslijeđena ovoj metodi null, tada a NullPointerException baca se.

Zatim ćemo pokazati kako koristiti ovu metodu pokazujući kako dobiti značajnu poruku o pogrešci s checkNotNull metoda prosljeđivanjem poruke o pogrešci:

@Test javna praznina givenNullString_whenCheckNotNullWithMessage_throwsException () {String nullObject = null; String message = "Molimo provjerite da li je isporučeni objekt null!"; assertThatThrownBy (() -> Preconditions.checkNotNull (nullObject, poruka)) .isInstanceOf (NullPointerException.class) .hasMessage (message) .hasNoCause (); }

Također možemo dobiti značajnu poruku o pogrešci na temelju dinamičkih podataka iz checkNotNull metoda prosljeđivanjem parametra poruci pogreške:

@Test public void whenCheckNotNullWithTemplateMessage_throwsException () {String nullObject = null; String message = "Molimo provjerite isporučeni objekt,% s!"; assertThatThrownBy (() -> Preconditions.checkNotNull (nullObject, poruka, novi objekt [] {null})) .isInstanceOf (NullPointerException.class) .hasMessage (message, nullObject) .hasNoCause (); }

6. checkPositionIndex

Metoda checkPositionIndex provjerava je li indeks prosljeđen kao argument ovoj metodi važeći indeks na popisu, nizu ili nizu određene veličine. Indeks položaja može se kretati od 0 uključujući do veličine. Popis, niz ili niz ne prosljeđujete izravno, već samo njegovu veličinu.

Ova metoda baca IndexOutOfBoundsException ako indeks koji se prosljeđuje nije između 0 i zadane veličine, u suprotnom vraća vrijednost indeksa.

Pogledajmo kako možemo dobiti značajnu poruku o pogrešci s checkPositionIndex metoda:

@Test javna praznina givenArrayAndMsg_whenCheckPositionEvalsFalse_throwsException () {int [] brojevi = {1, 2, 3, 4, 5}; String message = "Molimo provjerite vezu niza i pokušajte ponovo"; assertThatThrownBy (() -> Preconditions.checkPositionIndex (6, numbers.length - 1, poruka)) .isInstanceOf (IndexOutOfBoundsException.class) .hasMessageStartingWith (poruka) .hasNoCause (); }

7. checkState

Metoda checkState provjerava valjanost stanja objekta i ne ovisi o argumentima metode. Na primjer, an Iterator ovo može koristiti da provjeri je li sljedeći pozvan prije bilo kojeg poziva za uklanjanje. Ova metoda baca IllegalStateException ako je stanje objekta (logička vrijednost prosljeđena kao argument metodi) u nevaljanom stanju.

Pogledajmo kako možemo koristiti ovu metodu prikazujući značajnu poruku o pogrešci iz checkState metoda prosljeđivanjem poruke o pogrešci kada izbaci iznimku:

@Test javna praznina givenStatesAndMsg_whenCheckStateEvalsFalse_throwsException () {int [] validStates = {-1, 0, 1}; int givenState = 10; String message = "Ušli ste u nevaljano stanje"; assertThatThrownBy (() -> Preconditions.checkState (Arrays.binarySearch (validStates, givenState)> 0, poruka)) .isInstanceOf (IllegalStateException.class) .hasMessageStartingWith (poruka) .hasNoCause (); }

8. Zaključak

U ovom uputstvu ilustrirali smo metode Preduvjeti razred iz knjižnice Guava. The Preduvjeti class pruža zbirku statičkih metoda koje se koriste za provjeru valjanosti poziva metode ili konstruktora s važećim vrijednostima parametara.

Kôd koji pripada gornjim primjerima može se naći u projektu GitHub - ovo je projekt zasnovan na Mavenu, pa bi ga trebalo lako uvesti i pokrenuti takav kakav jest.