我正在使用play框架2.4以及ebean数据模型和演进。目前,我正在尝试使用测试mysql数据库为我的模型编写第一个测试。在开始测试之前,我想要有一个干净的测试数据库。
到目前为止,我尝试了以下方法:
public class ModelUnitTest {
public static FakeApplication app;
@BeforeClass
public static void startApp() {
// Load test config with testserver
Map<String, String> settings = new HashMap<String, String>();
settings.put("db.default.driver", "com.mysql.jdbc.Driver");
settings.put("db.default.url", "jdbc:mysql://127.0.0.1:3306/sopra-ws1516-team10-test?autoReconnect=true&useSSL=false");
settings.put("db.default.username", "root");
settings.put("db.default.password", "root");
settings.put("play.evolutions.autoApply", "true");
settings.put("ebean.default", "models.ebean.*");
app = play.test.Helpers.fakeApplication(settings);
Evolutions.applyEvolutions(XXXXXX);
Helpers.start(app);
}
@Test
public void testCreateUser() {
try {
User testUser = User.createUser("Max", "Musterman", "01.01.1980", "max.mustermann@gmail.com", "1234");
assertNotNull(testUser);
} catch (Exception e) {
assertNull(e);
}
}
@AfterClass
public static void stopApp() {
Evolutions.cleanupEvolutions(XXXXXX);
Helpers.stop(app);
}
}如果没有进化,它可以工作,但问题是,当我开始测试时,我不能确保有一个空的数据库。我的解决方案是在我的测试之前应用进化,在我的测试之后清理进化。这将为我的测试提供一个干净的环境。
但是如果没有Database对象,实际上是不可能使用Evolutions类的,而且似乎无法使用我的FakeApplication创建的DB连接来创建数据库对象。
有人有解决这个问题的办法吗?
发布于 2016-11-14 18:46:22
我通过手动调用注入器来绕过它:
private static Database db;
@BeforeClass
public static void startApp() {
...
app = play.test.Helpers.fakeApplication(settings);
db = app.injector().instanceOf(Database.class);
Evolutions.applyEvolutions(db);
Helpers.start(app);
}
@AfterClass
public static void stopApp() {
Evolutions.cleanupEvolutions(db);
Helpers.stop(app);
}https://stackoverflow.com/questions/36089845
复制相似问题