我有一个使用Mongo数据库的play框架应用程序v2.2(使用play-jongo)。我在/test文件夹中有一些测试单元类。但是,如果我使用test
命令运行单元类,或者直接从eclipse运行,那么在MongoDB中根本找不到数据,但如果我正常运行应用程序,我可以看到数据。我使用了Helpers.faceApplication()
方法,但仍然没有任何数据。
这是单元测试代码:
@Test
public void test1() {
Helpers.running(Helpers.fakeApplication(), new Runnable() {
@Override
public void run() {
//MyUser is the mongo entity
MyUser myUser = MyUser.findById("123");
if (myUser != null) {
Logger.info("User ID: " + myUser.id);
} else {
Logger.info("User is NULL"); //it always get here
}
}
});
}
如果我运行测试单元,myUser总是返回null。
我感觉Helpers.fakeApplication没有读取/conf/applicaton.conf
,所以它没有连接到mongodb。
有人知道在测试单元中运行时如何将play连接到mongodb吗?
只是一些可能有用的信息。当您创建fakeApplication
时,您还可以提供一个数据库来测试:
running(fakeApplication(inMemoryDatabase("test")), new Runnable() {
public void run() {
// some assertions here
}
});
这当然会使用内存中的H2数据库。我不太熟悉Mongo,但对于常规SQL数据库,我会尝试这样的方法:
final Map<String, String> postgres = new HashMap<String, String>();
postgres.put("db.default.driver", "org.postgresql.Driver");
postgres.put("db.default.url", "jdbc:postgresql://localhost/myDataBase");
postgres.put("db.default.user", "postgres");
postgres.put("db.default.password", "password");
running(fakeApplication(postgres), new Runnable() {
public void run() {
// some assertions here
}
});
我希望这能给你一些关于如何使用Mongo的线索。
原来我使用的是旧的play-jongo版本(v0.4),它不支持在测试模式下加载现有的mongo数据库。因此,我的解决方案是通过修改文件/project/Build.scala
:中的play-jongo依赖关系,将play-jonggo更新为v0.5(对于playv2.1.x)
val appDependencies = Seq(
...
"uk.co.panaxiom" %% "play-jongo" % "0.5.0-jongo0.4"
)
有关另一个播放版本,请参阅play-jongo的readme.md.
接下来,在/conf/application.conf
中,我添加了以下行:
playjongo.test-uri="mongodb://127.0.0.1:27017/mydb"
所以这就是我需要更新play-jongo的原因,因为旧版本不支持playjongo.test-uri
配置。