1

我有使用 Mongo 数据库(使用play-jongo)的播放框架应用程序 v2.2。我在 /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?

4

2 回答 2

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 的线索。

于 2014-09-24T12:42:21.177 回答
0

事实证明,我使用的是不支持在测试模式下加载现有 mongo 数据库的旧 play-jongo 版本(v0.4)。所以我的解决方案是通过修改 file 中的 play-jongo 依赖项将 play-jongo 更新到 v0.5(对于 play v2.1.x)/project/Build.scala

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配置。

于 2014-09-24T17:58:51.583 回答