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

时间:2018-03-12 23:58:01

标签: playframework integration-testing datasource

我刚开始使用Play框架进行开发。我的生产数据库是一个MySQL实例。我正在尝试使用内存数据库实例中的H2来测试我的DAO类。 我的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课程是这样的:

public class EventDaoImpl implements EventDao {

private Database database;

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

我的测试类是这样的:

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 个答案:

答案 0 :(得分:1)

这是我的方法:

  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()
    
  3. 不能保证这是最优化的方法,但它可以正常工作。希望它能帮到你