在测试模式下运行时,Play框架中的Mongodb中没有数据

时间:2014-09-24 07:58:29

标签: java mongodb unit-testing playframework-2.0 jongo

我玩使用Mongo数据库的框架应用程序v2.2(使用play-jongo)。我在/ test文件夹中有一些测试单元类。但是,如果我使用test命令运行单元类或直接从eclipse运行,则Mongo DB中根本找不到数据,但如果我正常运行应用程序,我可以看到数据。我使用了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因此它没有连接到mongo db。

任何人都知道如何在测试单元中运行时将播放连接到mongo db?

2 个答案:

答案 0 :(得分:0)

只是一些可能有用的信息。创建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的线索。

答案 1 :(得分:0)

原来,我使用的是旧的play-jongo版本(v0.4),它不支持在测试模式下加载现有的mongo数据库。所以我的解决方案是通过修改文件/project/Build.scala中的play-jongo依赖项来将play-jongo更新为v0.5(对于p​​lay v2.1.x):

val appDependencies = Seq(
    ...
    "uk.co.panaxiom" %% "play-jongo" % "0.5.0-jongo0.4"
)

有关其他播放版本,请参阅play-jongo's readme.md

接下来,在/conf/application.conf我添加了这一行:

playjongo.test-uri="mongodb://127.0.0.1:27017/mydb"

所以这就是我需要更新play-jongo的原因,因为旧版本不支持playjongo.test-uri配置。