Guide til Guavas præbetingelser

1. Oversigt

I denne vejledning viser vi, hvordan du bruger Google Guava Forudsætninger klasse.

Det Forudsætninger klasse giver en liste over statiske metoder til kontrol af, at en metode eller en konstrukt påberåbes med gyldige parameterværdier. Hvis en forudsætning mislykkes, kastes en skræddersyet undtagelse.

2. Google Guava Forudsætninger

Hver statiske metode i Forudsætninger klasse har tre varianter:

  • Ingen argumenter. Undtagelser kastes uden en fejlmeddelelse
  • En ekstra Objekt argument, der fungerer som en fejlmeddelelse. Undtagelser kastes med en fejlmeddelelse
  • Et ekstra strengargument med et vilkårligt antal yderligere Objekt argumenter, der fungerer som en fejlmeddelelse med en pladsholder. Dette opfører sig lidt som printf, men for GWT-kompatibilitet og effektivitet tillader det kun % s indikatorer

Lad os se på, hvordan du bruger Forudsætninger klasse.

2.1. Maven afhængighed

Lad os starte med at tilføje Googles Guava-biblioteksafhængighed i pom.xml:

 com.google.guava guava 29.0-jre 

Den seneste version af afhængigheden kan kontrolleres her.

3. checkArgument

Det metode checkArgument af Forudsætnings klasse sikrer sandheden af ​​de parametre, der sendes til opkaldsmetoden. Denne metode accepterer en boolsk tilstand og kaster en IllegalArgumentException når betingelsen er falsk.

Lad os se, hvordan vi kan bruge denne metode med nogle eksempler.

3.1. Uden en fejlmeddelelse

Vi kan bruge checkArgument uden at videregive nogen ekstra parameter til checkArgument metode:

@Test offentlig ugyldig nårCheckArgumentEvaluatesFalse_throwsException () {int age = -18; assertThatThrownBy (() -> Preconditions.checkArgument (age> 0)) .isInstanceOf (IllegalArgumentException.class) .hasMessage (null) .hasNoCause (); }

3.2. Med en fejlmeddelelse

Vi kan få en meningsfuld fejlmeddelelse fra checkArgument metode ved at sende en fejlmeddelelse:

@Test offentligt ugyldigt givenErrorMsg_whenCheckArgEvalsFalse_throwsException () {int age = -18; Strengmeddelelse = "Alder kan ikke være nul eller mindre end nul."; assertThatThrownBy (() -> Preconditions.checkArgument (age> 0, message)) .isInstanceOf (IllegalArgumentException.class) .hasMessage (message) .hasNoCause (); }

3.3. Med en skabelonfejlmeddelelse

Vi kan få en meningsfuld fejlmeddelelse sammen med dynamiske data fra checkArgument metode ved at sende en fejlmeddelelse:

@Test offentlig ugyldighed givenTemplateMsg_whenCheckArgEvalsFalse_throwsException () {int age = -18; Strengmeddelelse = "Alder skal være positivt tal, du har angivet% s."; assertThatThrownBy (() -> Preconditions.checkArgument (age> 0, message, age)) .isInstanceOf (IllegalArgumentException.class) .hasMessage (message, age) .hasNoCause (); } 

4. checkElementIndex

Metoden checkElementIndex kontrollerer, at et indeks er et gyldigt indeks i en liste, streng eller et array med en bestemt størrelse. Et elementindeks kan variere fra 0 inklusive til størrelse eksklusiv. Du videregiver ikke en liste, streng eller matrix direkte, du sender bare dens størrelse. Denne metode kaster en IndexOutOfBoundsException hvis indekset ikke er et gyldigt elementindeks, returnerer det ellers et indeks, der sendes til metoden.

Lad os se, hvordan vi kan bruge denne metode ved at vise en meningsfuld fejlmeddelelse fra checkElementIndex metode ved at sende en fejlmeddelelse, når den giver en undtagelse:

@ Test offentlig ugyldighed givenArrayAndMsg_whenCheckElementEvalsFalse_throwsException () {int [] numbers = {1, 2, 3, 4, 5}; String message = "Kontroller en matrixs afgrænsning og prøv igen"; assertThatThrownBy (() -> Preconditions.checkElementIndex (6, numbers.length - 1, message)) .isInstanceOf (IndexOutOfBoundsException.class) .hasMessageStartingWith (message) .hasNoCause (); }

5. checkNotNull

Metoden checkNotNull kontrollerer, om en værdi, der leveres som parameter, er nul. Den returnerer den værdi, der er blevet kontrolleret. Hvis den værdi, der er overført til denne metode, er nul, er a NullPointerException kastes.

Dernæst skal vi vise, hvordan man bruger denne metode ved at vise, hvordan man får en meningsfuld fejlmeddelelse fra checkNotNull metode ved at sende en fejlmeddelelse:

@Test offentlig ugyldighed givenNullString_whenCheckNotNullWithMessage_throwsException () {String nullObject = null; Strengmeddelelse = "Kontroller det leverede objekt, dets nul!"; assertThatThrownBy (() -> Preconditions.checkNotNull (nullObject, message)) .isInstanceOf (NullPointerException.class) .hasMessage (message) .hasNoCause (); }

Vi kan også få en meningsfuld fejlmeddelelse baseret på dynamiske data fra checkNotNull metode ved at sende en parameter til fejlmeddelelsen:

@Test offentlig ugyldig nårCheckNotNullWithTemplateMessage_throwsException () {String nullObject = null; String message = "Kontroller det leverede objekt, dets% s!"; assertThatThrownBy (() -> Preconditions.checkNotNull (nullObject, besked, nyt objekt [] {null})) .isInstanceOf (NullPointerException.class) .hasMessage (besked, nullObject) .hasNoCause (); }

6. checkPositionIndex

Metoden checkPositionIndex kontrollerer, at et indeks, der er sendt som et argument til denne metode, er et gyldigt indeks i en liste, streng eller matrix med en bestemt størrelse. Et positionsindeks kan variere fra 0 inklusive til størrelse inklusive. Du videregiver ikke listen, strengen eller arrayet direkte, du sender bare størrelsen.

Denne metode kaster en IndexOutOfBoundsException hvis det indeks, der er sendt, ikke er mellem 0 og den angivne størrelse, returnerer det ellers indeksværdien.

Lad os se, hvordan vi kan få en meningsfuld fejlmeddelelse fra checkPositionIndex metode:

@Test offentlig ugyldighed givenArrayAndMsg_whenCheckPositionEvalsFalse_throwsException () {int [] numbers = {1, 2, 3, 4, 5}; Strengmeddelelse = "Kontroller grænsen for en matrix og prøv igen"; assertThatThrownBy (() -> Preconditions.checkPositionIndex (6, numbers.length - 1, message)) .isInstanceOf (IndexOutOfBoundsException.class) .hasMessageStartingWith (message) .hasNoCause (); }

7. checkState

Metoden checkState kontrollerer gyldigheden af ​​et objekts tilstand og afhænger ikke af metodens argumenter. For eksempel en Iterator kan bruge dette til at kontrollere, at næste er blevet kaldt op før et opkald for at fjerne. Denne metode kaster en IllegalStateException hvis et objekts tilstand (boolsk værdi, der sendes som et argument til metoden), er i en ugyldig tilstand.

Lad os se, hvordan vi kan bruge denne metode ved at vise en meningsfuld fejlmeddelelse fra checkState metode ved at sende en fejlmeddelelse, når den giver en undtagelse:

@Test offentlig ugyldighed givenStatesAndMsg_whenCheckStateEvalsFalse_throwsException () {int [] validStates = {-1, 0, 1}; int givenState = 10; String message = "Du har indtastet en ugyldig tilstand"; assertThatThrownBy (() -> Preconditions.checkState (Arrays.binarySearch (validStates, givenState)> 0, message)) .isInstanceOf (IllegalStateException.class) .hasMessageStartingWith (message) .hasNoCause (); }

8. Konklusion

I denne vejledning illustrerede vi metoderne til Forudsætninger klasse fra Guava biblioteket. Det Forudsætninger klasse giver en samling af statiske metoder, der bruges til at validere, at en metode eller en konstrukt påberåbes med gyldige parameterværdier.

Koden, der hører til ovenstående eksempler, findes i GitHub-projektet - dette er et Maven-baseret projekt, så det skal være let at importere og køre som det er.