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