使用内存数据库通过 Play Framework 测试我的 DAO

Use inmemory database for testing my DAO with Play Framework

我刚开始使用 Play 框架进行开发。我的生产数据库是一个 MySQL 实例。我正在尝试使用内存数据库实例中的 H2 测试我的 DAO class。 我的 application.conf 的相关部分是:

db {
default.driver=com.mysql.jdbc.Driver
default.url="jdbc:mysql://localhost:3306/production?useSSL=false"
default.username=root
default.password="**********"

test.driver=com.mysql.jdbc.Driver
test.url="jdbc:mysql://localhost:3306/test?useSSL=false"
test.username=root
test.password="**********"}

我的 DAO class 是这样的:

public class EventDaoImpl implements EventDao {

private Database database;

@Inject
public EventDaoImpl(Database database) {
    this.database = database;
}

我的测试class是这样的:

public class EventDaoImplIntegrationTest {

@Inject
private EventDao eventDao;
@Before
public void setup() {
    Module testModule = new AbstractModule() {
        @Override
        public void configure() {
            bind(EventDao.class).to(EventDaoImpl.class);
        }
    };

    GuiceApplicationBuilder builder = new GuiceApplicationLoader()
            .builder(new ApplicationLoader.Context(Environment.simple()))
            .overrides(testModule);
    Guice.createInjector(builder.applicationModule()).injectMembers(this);

    //Helpers.start(application);
}

@After
public void teardown() {
    //Helpers.stop(application);
}

我的问题是如何告诉 Play 我想使用测试数据源进行测试?

这是我的方法:

  1. 我有测试 application-test.conf 其中包括:

    include "application.conf"    
    # now override variables that we would like to from application.conf
    db.default.driver="org.h2.Driver"
    db.default.url="jdbc:h2:mem:test"
    ...
    
  2. 创建 GuiceApplication 时,我执行以下操作:

    Config config = ConfigFactory.load("application-test");
    app = new GuiceApplicationBuilder().configure(config).build()
    

不能保证这是最佳方法,但效果很好。希望对你有帮助