Guide til Guavas forhåndsbetingelser

1. Oversikt

I denne veiledningen vil vi vise hvordan du bruker Google Guava Forutsetninger klasse.

De Forutsetninger klasse gir en liste over statiske metoder for å kontrollere at en metode eller en konstrukt er påkalt med gyldige parameterverdier. Hvis en forutsetning mislykkes, kastes et skreddersydd unntak.

2. Google Guava Forutsetninger

Hver statiske metode i Forutsetninger klassen har tre varianter:

  • Ingen argumenter. Unntak kastes uten feilmelding
  • En ekstra Gjenstand argument som fungerer som en feilmelding. Unntak kastes med en feilmelding
  • Et ekstra strengargument, med et vilkårlig antall tillegg Gjenstand argumenter som fungerer som en feilmelding med en plassholder. Dette oppfører seg litt som printf, men for GWT-kompatibilitet og effektivitet tillater det bare % s indikatorer

La oss ta en titt på hvordan du bruker Forutsetninger klasse.

2.1. Maven avhengighet

La oss starte med å legge til Googles avhengighet av Guava-biblioteket i pom.xml:

 com.google.guava guava 29.0-jre 

Den siste versjonen av avhengigheten kan sjekkes her.

3. checkArgument

De metode checkArgument av Forutsetningsklasse sikrer sannheten til parametrene som sendes til anropsmetoden. Denne metoden godtar en boolsk tilstand og kaster en IllegalArgumentException når tilstanden er falsk.

La oss se hvordan vi kan bruke denne metoden med noen eksempler.

3.1. Uten feilmelding

Vi kan bruke checkArgument uten å sende noen 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 feilmelding

Vi kan få en meningsfylt feilmelding fra checkArgument metode ved å sende en feilmelding:

@Test offentlig ugyldighet givenErrorMsg_whenCheckArgEvalsFalse_throwsException () {int age = -18; Strengmelding = "Alder kan ikke være null eller mindre enn null."; assertThatThrownBy (() -> Preconditions.checkArgument (alder> 0, melding)) .isInstanceOf (IllegalArgumentException.class) .hasMessage (melding) .hasNoCause (); }

3.3. Med en malfeilmelding

Vi kan få en meningsfylt feilmelding sammen med dynamiske data fra checkArgument metode ved å sende en feilmelding:

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

4. checkElementIndex

Metoden checkElementIndex kontrollerer at en indeks er en gyldig indeks i en liste, streng eller en matrise med en spesifisert størrelse. En elementindeks kan variere fra 0 inkludert til størrelse eksklusiv. Du sender ikke en liste, streng eller matrise direkte, du passerer bare størrelsen. Denne metoden kaster en IndexOutOfBoundsException Hvis indeksen ikke er en gyldig elementindeks, returnerer den en indeks som sendes til metoden.

La oss se hvordan vi kan bruke denne metoden ved å vise en meningsfylt feilmelding fra checkElementIndex metode ved å sende en feilmelding når den gir et unntak:

@Test offentlig ugyldig givenArrayAndMsg_whenCheckElementEvalsFalse_throwsException () {int [] numbers = {1, 2, 3, 4, 5}; Strengmelding = "Kontroller grensen til en matrise og prøv på nytt"; assertThatThrownBy (() -> Preconditions.checkElementIndex (6, numbers.length - 1, message)) .isInstanceOf (IndexOutOfBoundsException.class) .hasMessageStartingWith (message) .hasNoCause (); }

5. checkNotNull

Metoden checkNotNull sjekker om en verdi levert som parameter er null. Den returnerer verdien som er sjekket. Hvis verdien som er overført til denne metoden er null, så er a NullPointerException blir kastet.

Deretter skal vi vise hvordan du bruker denne metoden ved å vise hvordan du får en meningsfylt feilmelding fra checkNotNull metode ved å sende en feilmelding:

@Test offentlig ugyldig givenNullString_whenCheckNotNullWithMessage_throwsException () {String nullObject = null; Strengmelding = "Kontroller objektet som er levert, det er null!"; assertThatThrownBy (() -> Preconditions.checkNotNull (nullObject, message)) .isInstanceOf (NullPointerException.class) .hasMessage (message) .hasNoCause (); }

Vi kan også få en meningsfylt feilmelding basert på dynamiske data fra checkNotNull metode ved å sende en parameter til feilmeldingen:

@Test offentlig ugyldig nårCheckNotNullWithTemplateMessage_throwsException () {String nullObject = null; Strengmelding = "Kontroller objektet som er levert, det er% s!"; assertThatThrownBy (() -> Preconditions.checkNotNull (nullObject, message, new Object [] {null})) .isInstanceOf (NullPointerException.class) .hasMessage (message, nullObject) .hasNoCause (); }

6. checkPositionIndex

Metoden checkPositionIndex sjekker at en indeks sendt som et argument til denne metoden er en gyldig indeks i en liste, streng eller matrise av en spesifisert størrelse. En posisjonsindeks kan variere fra 0 inkludert til størrelse inkludert. Du passerer ikke listen, strengen eller matrisen direkte, du passerer bare størrelsen.

Denne metoden kaster en IndexOutOfBoundsException hvis indeksen som sendes ikke er mellom 0 og størrelsen som er gitt, returnerer den indeksverdien.

La oss se hvordan vi kan få en meningsfylt feilmelding fra checkPositionIndex metode:

@Test offentlig ugyldig givenArrayAndMsg_whenCheckPositionEvalsFalse_throwsException () {int [] numbers = {1, 2, 3, 4, 5}; Strengmelding = "Kontroller grensen til en matrise og prøv på nytt"; assertThatThrownBy (() -> Preconditions.checkPositionIndex (6, numbers.length - 1, message)) .isInstanceOf (IndexOutOfBoundsException.class) .hasMessageStartingWith (message) .hasNoCause (); }

7. checkState

Metoden checkState kontrollerer gyldigheten til et objekt og er ikke avhengig av metodeargumentene. For eksempel en Iterator kan bruke dette for å sjekke at neste har blitt ringt før en samtale om å fjerne. Denne metoden kaster en IllegalStateException hvis tilstanden til et objekt (boolsk verdi overført som et argument til metoden) er i en ugyldig tilstand.

La oss se hvordan vi kan bruke denne metoden ved å vise en meningsfylt feilmelding fra checkState metode ved å sende en feilmelding når den gir et unntak:

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

8. Konklusjon

I denne opplæringen illustrerte vi metodene til Forutsetninger klasse fra Guava-biblioteket. De Forutsetninger klasse gir en samling av statiske metoder som brukes til å validere at en metode eller en konstrukt er påkalt med gyldige parameterverdier.

Koden som hører til eksemplene ovenfor, finnes i GitHub-prosjektet - dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.


$config[zx-auto] not found$config[zx-overlay] not found