Ə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