Junit Assert & AssertEquals met voorbeeld

โšก Slimme samenvatting

JUnit Assert en AssertEquals bepalen of een testcase geslaagd of mislukt is door de verwachte en werkelijke waarden te vergelijken. Deze handleiding legt de assert-methoden van org.junit.Assert uit, waaronder beweringen over booleaanse waarden, null-waarden, identiteit, gelijkheid en arrays, met een volledig werkend voorbeeld.

  • โœ… Doel: Assert-methoden uit org.junit.Assert verifiรซren voorwaarden en detecteren testfouten.
  • ๐Ÿ”ข Methodetypen: Booleaanse, null-, identieke, gelijkheids-, array-gelijkheids- en foutbericht-asserties dekken veelvoorkomende controles.
  • ๐ŸŸฐ assertEquals: Vergelijkt waarden met behulp van de equals()-methode, wrapping Eerst primitieve vormen omzetten in objecten.
  • ๐Ÿ”ฌ Drijvend punt: Bij het vergelijken van float- of double-waarden is een delta-tolerantie vereist.
  • ๐Ÿงช Voorbeeld: Een testklasse en -runner demonstreren dat elke belangrijke assert-instructie 'true' retourneert.

JUnit Assert en AssertEquals

Wat is Junit Assert?

Assert is een methode die nuttig is om te bepalen of een testcase geslaagd of mislukt is. De assert-methoden worden aangeboden door de klasse org.junit.Assert, die de klasse java.lang.Object uitbreidt.

Er bestaan โ€‹โ€‹verschillende soorten beweringen, zoals Booleaanse, Null, Identiek, enzovoort.

JUnit Deze bibliotheek biedt een klasse genaamd Assert, die een aantal assertiemethoden bevat die nuttig zijn bij het schrijven van testgevallen en het opsporen van testfouten.

De assert-methoden worden geleverd door de klasse org.junit.Assert, wat de uitbreiding van java.lang.Object klasse.

JUnit Beweer methoden

Boolean

Als je de booleaanse voorwaarden (waar of onwaar) wilt testen, kun je de volgende assert-methoden gebruiken:

  1. assertTrue (voorwaarde)
  2. assertFalse (voorwaarde)

Hier is de voorwaarde een Booleaanse waarde.

Null-object

Als u de beginwaarde van een object/variabele wilt controleren, hebt u de volgende methoden tot uw beschikking:

  1. assertNull(object)
  2. assertNotNull(object)

Hier is het object een Java voorwerp, bv bewerenNull(werkelijk);

Identiek

Als je wilt controleren of de objecten identiek zijn (dat wil zeggen, twee verwijzingen naar hetzelfde object vergelijken), Java object) of anders:

  1. assertHetzelfde(verwacht, werkelijk) โ€” Het retourneert true als verwacht == feitelijk.
  2. assertNotSame(verwacht, feitelijk)

Beweer gelijken

Als je wilt testen of twee objecten gelijk zijn, kun je de volgende methode gebruiken:

  • assertEquals(verwacht, feitelijk)

Het zal waar retourneren als verwacht.gelijk aan(werkelijk) geeft true terug.

Beweer dat array gelijk is

Als je de gelijkheid van arrays wilt testen, kun je de volgende methode gebruiken:

  • assertArrayEquals(verwacht, feitelijk)

De bovenstaande methode moet worden gebruikt als de arrays dezelfde lengte hebben. Voor elke geldige waarde voor i, u kunt het controleren zoals hieronder aangegeven:

  • assertEquals(expected[i], actual[i])
  • assertArrayEquals(expected[i], actual[i])

Mislukt bericht

Als je een beweringsfout wilt maken, dan heb je dat gedaan mislukking(), wat altijd resulteert in een onvoldoende.

  • mislukken(bericht);

Je kunt een assertiemethode hebben met een extra Draad parameter als eerste parameter. Deze tekenreeks wordt aan het foutbericht toegevoegd als de bewering mislukt. Bijvoorbeeld: mislukt(bericht) kan worden geschreven als:

  • assertEquals(message, expected, actual)

JUnit assertIs gelijk aan

Je beschikt over assertEquals(a, b), die berust op de is gelijk aan () methode van de Object-klasse.

  • Hier wordt het geรซvalueerd als a.gelijk aan(b).
  • Hier wordt de te testen klasse gebruikt om een โ€‹โ€‹geschikte gelijkheidsrelatie te bepalen.
  • Als een klasse de is gelijk aan () methode van de Object klasse, dan krijgt deze het standaardgedrag van de is gelijk aan () methode, oftewel objectidentiteit.

If a en b zijn primitieven zoals byte, int, boolean, enz., dan wordt het volgende gedaan voor assertEquals(a, b):

a en b wordt geconverteerd naar hun equivalente wrapper-objecttype (Byte, geheel getal, booleaans, enz.), en dan a.gelijk aan(b) zal worden geรซvalueerd.

Neem bijvoorbeeld de onderstaande tekenreeksen die dezelfde waarden hebben; laten we dit testen met behulp van assertEquals:

String obj1 = "Junit";
String obj2 = "Junit";
assertEquals(obj1, obj2);

De bovenstaande assert-instructie zal true retourneren, aangezien obj1.equals(obj2) true retourneert.

Drijvende-komma-beweringen

Wanneer je drijvende-kommawaarden wilt vergelijken (bijvoorbeeld, verdubbelen or drijven), heb je een extra verplichte parameter nodig, delta, om problemen met afrondingsfouten bij drijvende-kommavergelijkingen te voorkomen.

De bewering evalueert zoals hieronder weergegeven:

  • Math.abs(verwacht โ€“ werkelijk) <= delta

Bijvoorbeeld:

assertEquals(aDoubleWaarde, nog eenDoubleWaarde, 0.001)

JUnit Beweer voorbeeld

Het onderstaande voorbeeld laat zien hoe je een voorwaarde kunt controleren met behulp van JUnit methoden beweren.

Laten we een eenvoudige testklasse maken met de naam Junit4AssertionTest.java en een testrunnerklasse TestRunner.java.

Je gaat een aantal variabelen en belangrijke assert-instructies aanmaken in JUnit.

In dit voorbeeld voert u onze testklasse uit met behulp van TestRunner.java.

Stap 1) Laten we een klasse maken die alle belangrijke assert-methodes omvat. JUnit:

Junit4AssertionTest.java

package guru99.junit;

import static org.junit.Assert.*;
import org.junit.Test;

public class Junit4AssertionTest {

    @Test
    public void testAssert() {

        // Variable declaration
        String string1 = "Junit";
        String string2 = "Junit";
        String string3 = "test";
        String string4 = "test";
        String string5 = null;
        int variable1 = 1;
        int variable2 = 2;
        int[] airethematicArrary1 = { 1, 2, 3 };
        int[] airethematicArrary2 = { 1, 2, 3 };

        // Assert statements
        assertEquals(string1, string2);
        assertSame(string3, string4);
        assertNotSame(string1, string3);
        assertNotNull(string1);
        assertNull(string5);
        assertTrue(variable1 < variable2);
        assertArrayEquals(airethematicArrary1, airethematicArrary2);
    }
}

Stap 2) Je moet een testrunnerklasse maken om de bovenstaande klasse uit te voeren:

TestRunner.java

package guru99.junit;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
    public static void main(String[] args) {
        Result result = JUnitCore.runClasses(Junit4AssertionTest.class);
        for (Failure failure : result.getFailures()) {
            System.out.println(failure.toString());
        }
        System.out.println("Result==" + result.wasSuccessful());
    }
}

Stap 3) Laten we de verwachte uitvoer stap voor stap analyseren. Bekijk alle assert-instructies รฉรฉn voor รฉรฉn:

  1. assertEquals(string1, string2);

Vergelijk nu string1=โ€Junitโ€ met string2=โ€Junitโ€ met behulp van de equals-methode van de Object-klasse. Vervang de assertEquals-methode door de java.lang.Object.equals()-methode:

string1.equals(string2) => retourneert true

Dus assertEquals(string1, string2) zal retourneren waar.

  1. assertSame(string3, string4);

De functionaliteit "assertSame()" controleert of de twee objecten naar hetzelfde object verwijzen. Omdat string3="test" en string4="test" zijn, zijn zowel string3 als string4 van hetzelfde type, dus assertSame(string3, string4) zal true retourneren. waar.

  1. assertNotSame(string1, string3);

De functionaliteit "assertNotSame()" controleert of de twee objecten niet naar hetzelfde object verwijzen. Omdat string1="Junit" en string3="test", zijn string1 en string3 van verschillende typen, dus assertNotSame(string1, string3) zal `false` retourneren. waar.

  1. assertNotNull(string1);

De functionaliteit "assertNotNull()" controleert of een object niet null is. Omdat string1="Junit", wat een niet-null waarde is, zal assertNotNull(string1) een waarde retourneren. waar.

  1. assertNull(string5);

De functionaliteit "assertNull()" controleert of een object null is. Omdat string5=null, wat een null-waarde is, zal assertNull(string5) null retourneren. waar.

  1. assertTrue(variabele1 < variabele2);

De functionaliteit "assertTrue()" controleert of een voorwaarde waar is. Omdat variable1=1 en variable2=2, wat aantoont dat de voorwaarde variable1 < variable2 waar is, zal assertTrue(variable1 < variable2) het volgende retourneren: waar.

  1. assertArrayEquals(airethematischeArrary1, airethematischeArrary2);

De functionaliteit "assertArrayEquals()" controleert of de verwachte array en de resulterende array gelijk zijn. Het type array kan int, long, short, char, byte of java.lang.Object zijn. Omdat airethematicArrary1 = { 1, 2, 3 } en airethematicArrary2 = { 1, 2, 3 }, wat aantoont dat beide arrays gelijk zijn, zal assertArrayEquals(airethematicArrary1, airethematicArrary2) true retourneren. waar.

Aangezien alle zeven beweringen de volgende uitspraken bevatten: Junit4AssertionTest.java Als je de test uitvoert met `assert class` en de klasse retourneert `true`, dan zal de test als succesvol worden beoordeeld (zie onderstaande uitvoer).

Stap 4) Klik met de rechtermuisknop op Junit4AssertionTest.java en klik op Uitvoeren als -> JUnit. U zult de uitvoer zien zoals hieronder weergegeven:

JUnit Beweer voorbeeld

Bovenstaande output toont een succesvol testresultaat, zoals verwacht.

Veelgestelde vragen

Ja. AI-assistenten kunnen assertEquals, assertTrue en andere beweringen genereren op basis van het verwachte gedrag van een methode. Je moet echter nog steeds de verwachte waarden en randgevallen controleren om ervoor te zorgen dat de tests zinvol zijn.

Ja. AI kan suggesties doen voor `assertEquals` in plaats van `assertSame` of `assertArrayEquals`, afhankelijk van wat je vergelijkt. Dit vermindert veelgemaakte fouten, zoals het controleren van referenties terwijl je waarden wilde vergelijken.

`assertEquals` controleert de gelijkheid van waarden met behulp van de `equals()`-methode. `assertSame` controleert of twee verwijzingen naar exact hetzelfde object in het geheugen wijzen. Twee objecten met dezelfde waarde kunnen de `assertSame`-controle niet doorstaan.

Wanneer een bewering mislukt, JUnit Gooit een AssertionError, markeert de test als mislukt en rapporteert het optionele bericht samen met de verwachte en werkelijke waarden om u te helpen bij het debuggen van de test.

Vat dit bericht samen met: