Skip to content

Teste Unitare în Java cu JUnit 5 — @Test, assert, parametrizare

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Teste Unitare în Java cu JUnit 5. We cover key concepts, practical examples, and best practices.

JUnit 5 este framework-ul standard pentru testare unitară în Java, oferind adnotări pentru metode de test, aserțiuni pentru verificarea rezultatelor și suport pentru teste parametrizate care rulează același test cu date multiple.

The Problem

Fără teste unitare, bug-urile sunt descoperite târziu, în producție, iar refactorizarea codului devine riscantă. Acest quick-fix îți arată cum să scrii teste unitare eficiente cu JUnit 5.

The Wrong Way

// Testare manuală cu System.out — nesistematică
System.out.println(calculator.add(2, 3));
// trebuie să verifici manual output-ul

The Right Way

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class CalculatorTest {
    @Test
    void shouldAddTwoNumbers() {
        Calculator calc = new Calculator();
        assertEquals(5, calc.add(2, 3));
    }
}

Output:

PASSED: shouldAddTwoNumbers()

Step-by-Step Fix

1. Scrie un test de bază

@Test
void shouldReturnTrueWhenConditionMet() {
    assertTrue(service.isActive());
    assertEquals("expected", actual);
    assertNotNull(obj);
    assertThrows(IllegalArgumentException.class, () -> {
        service.process(null);
    });
}

2. Folosește teste parametrizate

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

@ParameterizedTest
@CsvSource({
    "2, 3, 5",
    "0, 0, 0",
    "-1, 1, 0"
})
void shouldAdd(int a, int b, int expected) {
    assertEquals(expected, calculator.add(a, b));
}

3. Ciclul de viață al testelor

@BeforeAll static void setupAll() { ... }         // o dată înainte de toate
@BeforeEach void setup() { ... }                  // înainte de fiecare test
@AfterEach void cleanup() { ... }                 // după fiecare test
@AfterAll static void cleanupAll() { ... }        // o dată după toate

Prevention Tips

  • Numește testele descriptiv — shouldThrowWhenInputIsNull în loc de test1
  • Un test ar trebui să verifice un singur concept — dacă un test eșuează, ar trebui să știi exact de ce
  • Folosește assertThrows pentru a testa excepțiile, nu try-catch în test
  • Nu face teste care depind de ordinea de execuție — fiecare test trebuie să fie independent

Common Mistakes

  1. Teste care nu verifică nimic — fără aserțiuni, testul trece indiferent de rezultat.
  2. Dependența de ordinea testelor — testele JUnit 5 nu garantează o ordine anume.
  3. Folosirea lui System.out în teste — folosește un logger și aserțiuni, nu output vizual.

FAQ

### Ce este JUnit 5?

Un framework de testare pentru Java care oferă adnotări, aserțiuni și mecanisme de parametrizare pentru scrierea și rularea testelor unitare.

Ce diferență e între @Test și @ParameterizedTest?

@Test rulează o singură dată. @ParameterizedTest rulează de multiple ori cu date diferite, specificate prin @CsvSource, @ValueSource etc.

Ce este o aserțiune în testare?

O metodă care verifică o condiție. Dacă condiția e falsă, testul eșuează cu un mesaj descriptiv. Exemple: assertEquals, assertTrue, assertThrows.

Construit de dezvoltatorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu Java pentru productivitate și securitate sporite.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro