Documentation / Setup / Testing
test-ebean.properties
When you want to run all tests against H2
in memory database a simple way to do this is to add a
src/test/resources/test-ebean.properties
to your project. In the test-ebean.properties
you can effectively override the properties of the datasource and specify to use H2
.
When an EbeanServer is created automatically via Ebean.getDefaultServer()
or Ebean.getServer(name)
then Ebean will look for the existence of test-ebean.properties in the classpath. If found this then typically
specifies to use an in memory H2
datasource.
When programmatically creating an EbeanServer using ServerConfig
and EbeanServerFactory
there is a method serverConfig.loadTestProperties()
which will similarly look for a test-ebean.properties
file if present.
@Override
public EbeanServer getObject() throws Exception {
ServerConfig config = new ServerConfig();
config.setName("db");
config.loadFromProperties(properties);
...
// load test-ebean.properties if present for running tests
// typically using H2 in memory database
config.loadTestProperties();
// set as default and register so that Model can be
// used if desired for save() and update() etc
config.setDefaultServer(true);
config.setRegister(true);
return EbeanServerFactory.create(config);
}
Example test-ebean.properties
ebean.db.ddl.generate=true
ebean.db.ddl.run=true
datasource.db.username=sa
datasource.db.password=
datasource.db.databaseUrl=jdbc:h2:mem:tests
datasource.db.databaseDriver=org.h2.Driver
MockiEbean
MockiEbean
from ebean-mocker
project provides a helper object to support mocking the EbeanServer using tools like
Mockito. If you like the Play/Active record style or Ebean singleton style you can add a test
dependency on ebean-mocker and use MockiEbean to enable use of Mockito and similar tools.
Mocking with Ebean singleton
MockiEbean
from ebean-mocker provides a mechanism for using a tool like Mockito and
replacing the default EbeanServer instance with a mock.
...
import io.ebeaninternal.server.core.DefaultServer;
...
@Test
public void testWithMockito() {
EbeanServer defaultServer = Ebean.getServer(null);
assertTrue("is a real EbeanServer", defaultServer instanceof DefaultServer);
Long someBeanId = Long.valueOf(47L);
// Use Mockito to create a mock for the EbeanServer interface
EbeanServer mock = Mockito.mock(EbeanServer.class);
// setup some required behaviour
when(mock.getBeanId(null)).thenReturn(someBeanId);
// ---------------
// 'register' the mock instance into Ebean
// this becomes the 'default EbeanServer' until
// mockiEbean.restoreOriginal() is called
// ---------------
MockiEbean mockiEbean = MockiEbean.start(mock);
try {
// Ebean singleton 'default server' now returns the mock instance
EbeanServer server = Ebean.getDefaultServer();
// always returns the someBeanId setup by Mockito
Object beanId = server.getBeanId(null);
assertEquals(someBeanId, beanId);
} finally {
// ---------------
// restore the original defaultServer instance
// ---------------
mockiEbean.restoreOriginal();
}
EbeanServer restoredServer = Ebean.getDefaultServer();
assertTrue("is a real EbeanServer", restoredServer instanceof DefaultServer);
}
MockiEbean Maven dependency
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mocker</artifactId>
<version>13.6.0</version>
<scope>test</scope>
</dependency>