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