【问题标题】:No data in Mongo DB in Play framework when running in Test mode在测试模式下运行时,Play框架中的Mongodb没有数据
【发布时间】:2014-09-24 07:58:29
【问题描述】:

我有播放框架应用程序 v2.2,它使用 Mongo 数据库(使用 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。

有谁知道在测试单元中运行时如何将 play 连接到 mongo db?

【问题讨论】:

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


    【解决方案1】:

    只是一些可能有用的信息。当您创建 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,它不遵循 db.default.* 配置。顺便说一句,你知道如何找到播放版本吗?
    【解决方案2】:

    原来我使用的是旧的 play-jongo 版本 (v0.4),它不支持在测试模式下加载现有的 mongo 数据库。所以我的解决方案是通过修改文件 /project/Build.scala 中的 play-jongo 依赖项来将 play-jongo 更新到 v0.5(用于 play 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 配置。

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      相关资源
      最近更新 更多