Java >> Java tutorial >  >> Tag >> assert

Brug af betingelser med AssertJ-påstande

1. Oversigt

I denne øvelse tager vi et kig på AssertJ-biblioteket, især på at definere og bruge betingelser til at skabe læsbare og vedligeholdelige tests.

AssertJ basics kan findes her.

2. Klasse under test

Lad os tage et kig på målklassen, som vi vil skrive testcases mod:

public class Member {
    private String name;
    private int age;

    // constructors and getters
}

3. Oprettelse af betingelser

Vi kan definere en påstandsbetingelse ved blot at instansiere Betingelsen klasse med passende argumenter.

Den mest bekvemme måde at oprette en Betingelse på er at bruge konstruktøren, der tager et prædikat som parameter . Andre konstruktører kræver, at vi opretter en underklasse og tilsidesætter matches metode, hvilket er mindre praktisk.

Når du konstruerer en Betingelse objekt, skal vi angive et type-argument, som er typen af ​​den værdi, som betingelsen evalueres i forhold til.

Lad os erklære en betingelse for alderen felt af vores medlem klasse:

Condition<Member> senior = new Condition<>(
  m -> m.getAge() >= 60, "senior");

senior variabel refererer nu til en Betingelse instans, som tester om en Person er senior baseret på dens alder .

Det andet argument til konstruktøren, strengen "senior" , er en kort beskrivelse, der vil blive brugt af AssertJ selv til at bygge en brugervenlig fejlmeddelelse, hvis betingelsen mislykkes.

En anden betingelse, at kontrollere om en Person har navnet "John", ser sådan ud:

Condition<Member> nameJohn = new Condition<>(
  m -> m.getName().equalsIgnoreCase("John"), 
  "name John"
);

4. Testcases

Lad os nu se, hvordan du gør brug af Condition genstande i vores testklasse. Antag, at betingelserne senior og navn John er tilgængelige som felter i vores testklasse.

4.1. Påstand om skalære værdier

Følgende test bør bestå som alder værdi er over anciennitetstærsklen:

Member member = new Member("John", 65);
assertThat(member).is(senior);

Da påstanden med er metoden passerer, en påstand, der bruger erNot med det samme argument mislykkes:

// assertion fails with an error message containing "not to be <senior>"
assertThat(member).isNot(senior);

Brug af navnetJohn variabel, kan vi skrive to lignende tests:

Member member = new Member("Jane", 60);
assertThat(member).doesNotHave(nameJohn);

// assertion fails with an error message containing "to have:\n <name John>"
assertThat(member).has(nameJohn);

Det er og har metoder, såvel som isNot og Har Ikke metoder har samme semantik . Hvilken vi bruger er kun et spørgsmål om valg. Ikke desto mindre anbefales det at vælge den, der gør vores testkode mere læsbar.

4.2. At hævde samlinger

Betingelser fungerer ikke kun med skalære værdier, men de kan også bekræfte eksistensen eller ikke-eksistensen af ​​elementer i en samling. Lad os tage et kig på en testcase:

List<Member> members = new ArrayList<>();
members.add(new Member("Alice", 50));
members.add(new Member("Bob", 60));

assertThat(members).haveExactly(1, senior);
assertThat(members).doNotHave(nameJohn);

har præcis metoden hævder det nøjagtige antal elementer, der opfylder den givne Betingelse , mens DoNotHave metode kontrollerer for fravær af elementer.

Metoderne har præcis og DoNotHave er ikke de eneste, der arbejder med indsamlingsforhold. For en komplet liste over disse metoder, se AbstractIterableAssert-klassen i API-dokumentationen.

4.3. Kombination af betingelser

Vi kan kombinere forskellige forhold ved hjælp af tre statiske metoder til påstandene klasse:

  • ikke – opretter en betingelse, der er opfyldt, hvis den angivne betingelse ikke er opfyldt
  • alle Af – opretter en betingelse, der kun er opfyldt, hvis alle de angivne betingelser er opfyldt
  • enhver af – opretter en betingelse, der er opfyldt, hvis mindst én af de angivne betingelser er opfyldt

Sådan ikke og allOf metoder kan bruges til at kombinere betingelser:

Member john = new Member("John", 60);
Member jane = new Member("Jane", 50);
        
assertThat(john).is(allOf(senior, nameJohn));
assertThat(jane).is(allOf(not(nameJohn), not(senior)));

På samme måde kan vi gøre brug af anyOf :

Member john = new Member("John", 50);
Member jane = new Member("Jane", 60);
        
assertThat(john).is(anyOf(senior, nameJohn));
assertThat(jane).is(anyOf(nameJohn, senior));

5. Konklusion

Denne vejledning gav en guide til AssertJ-betingelser, og hvordan man bruger dem til at skabe meget læsbare påstande i din testkode.

Implementeringen af ​​alle eksemplerne og kodestykkerne kan findes på GitHub.


Java tag