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
Weiterführende Aspekte
- https://github.com/zonkyio/embedded-postgres
- https://github.com/zonkyio/embedded-database-spring-test
---
Autor: Patrick Hiesinger / Software Architect / Standort Leipzig
Toilet Paper #158 als Download: Embedded Database mit Zonky (PDF)
Lust, das nächste ToiletPaper zu schreiben? Jetzt bei jambit bewerben!