When testing software that requires a database for persisting data there are different ways to do this. One way is to use a real database engine instance for testing purpose only. Setting up a full scale database server is totally oversized for testing purpose. So using a dedicated simply to use database is a good way. Furthermore the data may not persisted as after the test the data is not necessary anymore. For performance reasons a non-persistent database engine would be great. There are many solutions for in-memory database testing. One of them is
H2. Let’s have a look how
H2 can be configured for this purpose.
H2 database is available via maven central.
In order to use
H2 a connection can be allocated by the java default mechanism that supports loading a jdbc connection. Allocating a database connection is possible via:
When using another database engine, the setup is exactly the same. There is simply one difference: There is another connection url and maybe some connection parameters that influence the setup.
H2 connection Urls
The following table shows different connection urls for the
H2 database. Each of them may be apropriate, depending on the test setup.
|jdbc:h2:mem:test||multiple connections to one database called
|jdbc:h2:mem:||creates a private database for each connection|
|jdbc:h2:test||storing the data in the subfolder
H2 database engine is not the only lightweight database engine. There is e.g.
hsql or Apache
Derby. Both databases are also easy to use and have the same focus and are perfectly to use for unit and integration testing. All of them support in-memory database engines that forget the information after test.