Əsas məzmuna keçin

İnteqrasiya Testləmə

İnteqrasiya testləmə müxtəlif komponentlərin düzgün birlikdə işlədiyini yoxlayır.

İnteqrasiya Testləmə Növləri

  • Yuxarıdan aşağıya: Testləmə yüksək səviyyəli modullardan başlayır
  • Aşağıdan yuxarıya: Testləmə aşağı səviyyəli modullardan başlayır
  • Böyük partlayış: Bütün komponentlər eyni vaxtda inteqrasiya edilir
  • Hibrid: Yuxarıdan aşağıya və aşağıdan yuxarıya yanaşmaları birləşdirir

İnteqrasiya Testləmə və Vahid Testləmə

İnteqrasiya TestləməVahid Testləmə
Komponentlər arası qarşılıqlı əlaqəni test edirAyrı komponentləri təcrid halında test edir
İnterfeys problemlərini müəyyən edirKomponent funksionallığını yoxlayır
Daha yavaş icraSürətli icra
Daha çox quraşdırma tələb edirMock/stub-larla minimal quraşdırma
Həqiqi asılılıqları test edirAsılılıqlar üçün test dublları istifadə edir

Java Alətləri

  • Spring Test: Spring tətbiqlərini testləmək
  • REST-assured: RESTful API-ləri testləmək
  • Testcontainers: Yüngül məlumat bazası/xidmət nümunələri
  • Arquillian: Java EE tətbiqlərini testləmək

İnteqrasiya Testləmə Ən Yaxşı Təcrübələri

  1. Aydın sərhədlər müəyyən edin: Hər testə hansı komponentlərin daxil ediləcəyini müəyyən edin
  2. Test mühitlərindən istifadə edin: İnteqrasiya testləri üçün təcrid olunmuş mühitlər yaradın
  3. Test məlumatlarını idarə edin: Test məlumatlarının tutarlı və təcrid olunmuş olmasını təmin edin
  4. Xarici asılılıqları nəzarət edin: Xarici xidmətlər üçün konteyner və ya mock istifadə edin
  5. İnterfeysləri diqqət mərkəzinə alın: Komponentlər arası müqavilələri test edin
  6. Quraşdırma və təmizləməni avtomatlaşdırın: Testlərdən əvvəl və sonra təmiz vəziyyət təmin edin
  7. CI/CD kanalına daxil edin: İnteqrasiya testlərini davamlı inteqrasiyanın bir hissəsi kimi işlədin

Nümunə: REST API üçün İnteqrasiya Testi

Koda bax
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class UserControllerIntegrationTest {

@Autowired
private TestRestTemplate restTemplate;

@Autowired
private UserRepository userRepository;

@BeforeEach
void setup() {
userRepository.deleteAll();
}

@Test
void createUser_shouldReturnCreatedUser() {
// Prepare test data
UserDto userDto = new UserDto("john", "john@example.com");

// Send request to the API
ResponseEntity<User> response = restTemplate.postForEntity(
"/api/users", userDto, User.class);

// Verify response
assertEquals(HttpStatus.CREATED, response.getStatusCode());
assertNotNull(response.getBody());
assertEquals("john", response.getBody().getUsername());

// Verify data was saved to the database
Optional<User> savedUser = userRepository.findByUsername("john");
assertTrue(savedUser.isPresent());
}
}

Nümunə: Testcontainers ilə İnteqrasiya Testi

Koda bax
@Testcontainers
public class UserServiceIntegrationTest {

@Container
private static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:13")
.withDatabaseName("testdb")
.withUsername("test")
.withPassword("test");

private UserService userService;
private UserRepository userRepository;

@BeforeEach
void setup() {
// Configure datasource with container connection details
DataSource dataSource = DataSourceBuilder.create()
.url(postgres.getJdbcUrl())
.username(postgres.getUsername())
.password(postgres.getPassword())
.build();

userRepository = new UserRepositoryImpl(dataSource);
userService = new UserService(userRepository);
}

@Test
void createAndRetrieveUser() {
// Create a user
User user = new User("alice", "alice@example.com");
userService.createUser(user);

// Retrieve and verify
User retrieved = userService.findByUsername("alice");
assertNotNull(retrieved);
assertEquals("alice@example.com", retrieved.getEmail());
}
}

İnteqrasiya Testlərinin Nə Vaxt İstifadə Ediləcəyi

  • Çoxsaylı komponentlər arası qarşılıqlı əlaqəni testləmək
  • Məlumat bazası əməliyyatlarını yoxlamaq
  • API endpoint-lərini testləmək
  • Hadisə əsaslı sistemlərdə mesaj emalını təsdiqləmək