使用内存数据库通过 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 我想使用测试数据源进行测试?
这是我的方法:
我有测试 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"
...
创建 GuiceApplication 时,我执行以下操作:
Config config = ConfigFactory.load("application-test");
app = new GuiceApplicationBuilder().configure(config).build()
不能保证这是最佳方法,但效果很好。希望对你有帮助
我刚开始使用 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 我想使用测试数据源进行测试?
这是我的方法:
我有测试 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" ...
创建 GuiceApplication 时,我执行以下操作:
Config config = ConfigFactory.load("application-test"); app = new GuiceApplicationBuilder().configure(config).build()
不能保证这是最佳方法,但效果很好。希望对你有帮助