SpringBootTest H2 Database für Test

DrPils

Bekanntes Mitglied
Hi,

Meine Application läuft mit einer Postgres Datenbank, für die Unit Tests möchte ich aber dass eine H2 Datenbank verwendet wird.
Ich dachte der Weg dahin ist es in den Test Klassen, die Annotation @ActiveProfiles("profilname") und entprechend eine application.properties mit dem Profilnamen anzulegen.
Ich habe als einmal eine application.yaml Datei und eine application.test.yaml Datei angelegt.
Leider wird bei den Tests in die Postgres DB geschrieben.


Java:
@SpringBootTest
@ExtendWith(SpringExtension.class)
@EnableJpaRepositories(basePackages = "org.example.repositories")
@ActiveProfiles("test")
class CategoryServiceTest {
   /*
   ....
   * */
}

application.test.yaml
YAML:
spring:
  datasource:
    username: sa
    password:
    url: jdbc:h2:~/testdb;
    driverClassName: org.h2.Driver
logging:
  level:
    root: info
 
Vielleicht auch interessant statt H2: Testcontainers mit Postgres.

Damit startet man dann on the fly eine Postgres-Datenbank für die Tests, ist nicht relevant mehr Aufwand als H2, hat aber den Vorteil, das man noch mehr potentielle Fehler findet 🙂
 
Vielleicht auch interessant statt H2: Testcontainers mit Postgres.

Damit startet man dann on the fly eine Postgres-Datenbank für die Tests, ist nicht relevant mehr Aufwand als H2, hat aber den Vorteil, das man noch mehr potentielle Fehler findet 🙂

Habe mir die Testcontainer mal angeschaut. Irgendwie läuft er nicht bei mir.
containerIsUpAnRunning schlägt fehl.
OS ist Windows und die Docker engine läuft.

Java:
@Testcontainers
class TestContainerTest{

    companion object {
        @Container
        private val container = PostgreSQLContainer<Nothing>("postgres:latest")
    }

    @Test
    fun containerIsUpAnRunning() {
        assertTrue(container.isRunning)
    }
}
 
Habe mir die Testcontainer mal angeschaut. Irgendwie läuft er nicht bei mir.
containerIsUpAnRunning schlägt fehl.
OS ist Windows und die Docker engine läuft.

Java:
@Testcontainers
class TestContainerTest{

    companion object {
        @Container
        private val container = PostgreSQLContainer<Nothing>("postgres:latest")
    }

    @Test
    fun containerIsUpAnRunning() {
        assertTrue(container.isRunning)
    }
}

Ok man muss den Controller vorher mit .start() explizit starten 🙄
 

Zurück
Oben