Əsas məzmuna keçin

JUnit ilə Vahid Testlər

JUnit Java üçün ən məşhur vahid test çərçivəsidir. Bu bələdçi JUnit əsaslarını və praktiki nümunələri əhatə edir.

Quraşdırma

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>

Əsas Test Strukturu

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

public class CalculatorTest {

@Test
void addition() {
Calculator calculator = new Calculator();
assertEquals(5, calculator.add(2, 3), "2 + 3 should equal 5");
}
}

Ümumi JUnit Annotasiyaları

  • @Test: Metodu test metodu kimi işarələyir
  • @BeforeEach: Hər test metodundan əvvəl icra edilir
  • @AfterEach: Hər test metodundan sonra icra edilir
  • @BeforeAll: Bütün test metodlarından əvvəl bir dəfə icra edilir (statik olmalıdır)
  • @AfterAll: Bütün test metodlarından sonra bir dəfə icra edilir (statik olmalıdır)
  • @Disabled: Test metodu və ya sinfini deaktiv edir
  • @DisplayName: Test üçün xüsusi ad təmin edir

Quraşdırma və Təmizləmə Nümunəsi

Koda bax
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;

public class UserServiceTest {

private UserService userService;
private static Database database;

@BeforeAll
static void initDatabase() {
database = new Database();
database.connect();
}

@AfterAll
static void closeDatabase() {
database.disconnect();
}

@BeforeEach
void initUserService() {
userService = new UserService(database);
}

@Test
@DisplayName("User creation should succeed with valid data")
void createUserSuccess() {
User user = new User("john", "password123");
assertTrue(userService.createUser(user));
assertNotNull(userService.findUser("john"));
}
}

Təsdiqləmələr

Koda bax
@Test
void testAssertions() {
// Basic assertions
assertEquals(5, 2 + 3);
assertNotEquals(4, 2 + 3);
assertTrue(5 > 3);
assertFalse(5 < 3);
assertNull(null);
assertNotNull("text");

// Exception testing
assertThrows(ArithmeticException.class, () -> {
int result = 1 / 0;
});

// Grouped assertions
assertAll(
() -> assertEquals(4, 2 + 2),
() -> assertTrue(4 > 3)
);
}

Parametrli Testlər

Parametrli testlər eyni testi müxtəlif girişlərlə işlətməyə imkan verir:

Koda bax
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class CalculatorParameterizedTest {

@ParameterizedTest
@CsvSource({
"1, 1, 2",
"5, 3, 8",
"10, -5, 5"
})
void additionWithMultipleInputs(int a, int b, int expected) {
Calculator calculator = new Calculator();
assertEquals(expected, calculator.add(a, b));
}
}

İstisnalar Testləmə

Koda bax
@Test
void exceptionTesting() {
Exception exception = assertThrows(
ArithmeticException.class,
() -> divide(1, 0)
);

assertEquals("Division by zero", exception.getMessage());
}

int divide(int a, int b) {
if (b == 0) {
throw new ArithmeticException("Division by zero");
}
return a / b;
}

JUnit Testləri üçün Ən Yaxşı Təcrübələr

  1. Test adlandırması: Testin nə etdiyini izah edən açıqlayıcı adlar istifadə edin
  2. Hər test üçün bir təsdiqləmə: Hər testi tək davranışa yönəldin
  3. Arrange-Act-Assert naxışı: Testləri quraşdırma, icra və yoxlama ilə strukturlaşdırın
  4. Test müstəqilliyi: Testlər bir-birindən asılı olmamalıdır
  5. Sürətli icra: Testləri yüngül və sürətli saxlayın
  6. Xarici asılılıqlar üçün mock-lar istifadə edin: Test edilən vahidi təcrid edin
  7. Hədd halları test edin: Sərhəd şərtləri və xəta ssenarilərini daxil edin