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.