test-ebean.properties

すべてのテストをメモリ内データベースのH2で実行する場合は簡単な方法として、プロジェクトにsrc/test/resources/test-ebean.propertiesを追加します。test-ebean.propertiesでデータソースのプロパティを効果的にオーバーライドしてH2を使用するように指定できます。

Ebean.getDefaultServer()またはEbean.getServer(name)によってEbeanServerが自動的に作成されると、Ebeanはクラスパスでtest-ebean.propertiesの存在を確認します。見つかった場合は、通常はメモリ内のH2データソースを使用するように指定されます。

ServerConfigEbeanServerFactoryを使用してプログラムでEbeanServerを作成する場合、存在する場合はtest-ebean.propertiesファイルを同様に検索するserverConfig.loadTestProperties()メソッドがあります。

@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);
}

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

ebean-mockerプロジェクトのMockiEbeanは、Mockitoなどのツールを使用してEbeanServerをモックするためのヘルパーオブジェクトを提供します。Play/ActiveレコードスタイルまたはEbeanシングルトンスタイルが気に入った場合は、ebean-mockerにテスト依存関係を追加し、MockiEbeanを使用してMockitoなどのツールの使用を有効化できます。ebean-mockerのEbeanシングルトンMockiEbeanを使用してモックすることで、Mockitoなどのツールを使用してデフォルトのEbeanServerインスタンスをモックに置き換えるメカニズムが提供されます。

...
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>
  <groupId>io.ebean</groupId>
  <artifactId>ebean-mocker</artifactId>
  <version>13.6.0</version>
  <scope>test</scope>
</dependency>