22 Haziran 2021 Salı

SpringBoot Test @AutoConfigureTestDatabase Anotasyonu

Giriş
Şu satırı dahil ederiz
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
Not : Bu anotasyon yerine test için @DataJpaTest tercih edilebilir.

replace Alanı
Testlerin bellekteki bir veri tabanı yerine gerçek veri tabanında koşmasını sağlar. Açıklaması şöyle
In-memory embedded databases generally work well for tests since they are fast and don’t require any developer installation. If, however, you prefer to run tests against a real database you can use the @AutoConfigureTestDatabase annotation
Örnek
Şöyle yaparız
@DataJpaTest
@AutoConfigureTestDatabase(replace=Replace.NONE)
Örnek
Eğer veri tabanını bellekte değil de TestContainers içinde istersek şöyle yaparız
@DataJpaTest
@Testcontainers
@ActiveProfiles("test-containers")
@AutoConfigureTestDatabase(replace = Replace.NONE)
class PersonRepositoryTestContainers {

  @Autowired
  private PersonRepository personRepository;

  @Test
  void shouldReturnAlLastNames() {
    personRepository.saveAndFlush(new Person().setFirstName("John").setLastName("Brown"));
    personRepository.saveAndFlush(new Person().setFirstName("Kyle").setLastName("Green"));
    personRepository.saveAndFlush(new Person().setFirstName("Paul").setLastName("Brown"));

    assertEquals(Set.of("Brown", "Green"), personRepository.findAllLastNames());
  }
}
Açıklaması şöyle
@DataJpaTest is annotated with @AutoConfigureTestDatabase itself. This annotation replaces any data source with the H2 instance by default. So, we need to override this behavior by adding replace=Replace.NONE property.
Yani aslında şöyle yapmanın bir anlamı yok
@DataJpaTest
@AutoConfigureTestDatabase(replace=Replace.NONE,
                           connection = EmbeddedDatabaseConnection.H2)

Hiç yorum yok:

Yorum Gönder