Problem

Für Integrationstests hat es sich eingebürgert, eine H2 oder einen Docker-Container der angebunden Datenbank zu nutzen. Eine weitere Möglichkeit besteht in Form einer eingebetteten Datenbank. Diese hat den Vorteil genauso nahe an der Produktiv-Datenbank zu sein wie ein entsprechender Docker-Container. Gleichzeitig benötigt man jedoch keinen Container mehr und ist etwas performanter bei der Testausführung.

Lösung

Für Java Projekte gibt es das Projekt Zonky. Dies ist ursprünglich als Fork aus OpenTable Embedded PostgreSQL Component hervorgegangen. Zonky unterstützt eingebettete PostgreSQL DBs im Integrationstest. Aus dieser Version ging auch eine Version für das Spring Projekt hervor. Ein Beispiel, wie man Zonky in seine Integrationstests einbettet, sieht man in folgenden Code-Ausschnitten.

Zonky

Zonky unterstützt die Data-Provider:

  • Docker
  • Zonky
  • OpenTable
  • Yandex

Wobei alle Data-Provider PostgreSQL unterstützen. Docker unterstützt zusätzlich MSSQL, MySQL und MariaDB.

Liquibase sowie Flyway können normal verwendet werden.

Einbindung in Maven:

<dependency>
  <groupId>io.zonky.test</groupId>
  <artifactId>
    embedded-database-spring-test
  </artifactId>
  <version>2.1.1</version>
  <scope>test</scope>
</dependency>

Test mit Hilfe einer embedded DB, die Zonky zur Verfügung stellt:

@AutoConfigureEmbeddedDatabase          //Annotation of Zonky which leads the test to use an embedded DB
public class RepoIT {
 
    @Autowired
    private Repository repo;
 
    @Test
    public void ZonkyTest() {
        User user = new User(1, "Vorname", "Nachname");
        repo.save(user);
        Optional<User> found = repo.findById(user.getId());
        assertTrue(found.isPresent());
    }
}

Config in der application.xml:

zonky.test.database.type=auto                # Possible values: AUTO, POSTGRES, MSSQL, MYSQL, MARIADB, H2
zonky.test.database.provider=default         # Possible values: DEFAULT, DOCKER, ZONKY, OPENTABLE, YANDEX, EMBEDDED
jambit ToiletPaper#158 Embedded database with Zonky

Weiterführende Aspekte

---

Autor: Patrick Hiesinger / Software Architect / Standort Leipzig

SCHREIB UNS

* Pflichtfeld

SCHREIB UNS

* Pflichtfeld

Cookie-Einstellungen

Diese Website verwendet Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und Zugriffe auf die Website zu analysieren. Zudem werden Informationen zu Ihrer Verwendung der Website an Partner für soziale Medien, Werbung und Analysen weitergegeben. Die Partner führen diese Informationen möglicherweise mit weiteren Daten zusammen, die Sie ihnen bereitgestellt haben oder die sie im Rahmen Ihrer Nutzung der Dienste gesammelt haben.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. Dort können Sie nachträglich auch Ihre Cookie-Einstellungen ändern.

contact icon

Kontakt aufnehmen