Java >> Java tutorial >  >> Tag >> Spring

Spring Boot DataJpaTest enhedstest vender tilbage til H2 i stedet for mySql

Som standard er @DataJpaTest bruger i hukommelsen H2-database til repo-tests. Hvis du har brug for at bruge den faktiske DB, kan du overveje enten at deaktivere de automatiske konfigurationer eller bruge @SpringBootTest hvor hele applikationen web mvc er aktiveret.

Sådan deaktiverer du automatisk konfiguration:

@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@Transactional
@DataJpaTest
@AutoConfigureTestDatabase(replace=Replace.NONE)
public class IssueRepositoryIntegrationTests 

@AutoConfigureTestDatabase konfigurerer test H2 DB for dig. Du kan specifikt nævne ikke at ovenstående, eller du kan ekskludere denne automatiske konfiguration som:

@EnableAutoConfiguration(exclude=AutoConfigureTestDatabase.class)

PS: :Jeg har ikke selv prøvet ovenstående udelukkelse endnu.

For mere information om det, gå gennem javadoc: https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/jdbc/AutoConfigureTestDatabase.html


Fra @DataJpaTest dokumentation:

Som standard vil test, der er kommenteret med @DataJpaTest, bruge en indlejret hukommelsesdatabase (der erstatter enhver eksplicit eller sædvanligvis automatisk konfigureret DataSource).

Hvis du går til dokumentation, kan du se, at denne annotering samler en masse andre annoteringer.

@Transactional annotation opfører sig på en anden måde i testkontekst end i applikationskontekst:

Fra forårsdokumentation:

Annotering af en testmetode med @Transactional bevirker, at testen køres inden for en transaktion, der som standard automatisk rulles tilbage efter afslutning af testen.

Jeg mener, at jeg har givet nok information til at besvare dit spørgsmål. Derudover kan du tage et kig på følgende artikler:

Konfiguration af Separat Spring DataSource for tests
Test med @Configuration Classes and Profiles


Java tag