mysql - 使用 play2 框架运行 JUnit 测试时出现 mysql 连接问题

标签 mysql unit-testing junit playframework-2.0 database-testing

我目前正在为 Play 应用程序创建 JUnit 测试。当我尝试使用 FakeApplication 时,问题就来了。我在 JUnit 测试中创建了一个,但是当测试使用 fakeApplication 实例时,我得到了这个:

[error] Test controllers.MyClassTest.getMyProperty failed: play.api.Configuration$$anon$1: Configuration error[Cannot connect to database [default]]

这是我在 JUnit 测试类中的 Java 代码:

    ...
@BeforeClass
public static void startFakeApplication() {
    Map<String, String> settings = new HashMap<String, String>();
    settings.put("db.default.url", "jdbc:mysql://myhost/releaseDB?characterEncoding=UTF-8");
    settings.put("db.default.driver", "com.mysql.jdbc.Driver");
    settings.put("db.default.user", "release");
    settings.put("db.default.password", "release");
    settings.put("db.default.jndiName", "DefaultDS");
    Helpers.start(fakeApplication);
}
    ...

然后我的测试方法(注意虚拟运行,所以不会造成任何问题):

    ...
public void getMyProperty() {

    Helpers.running (fakeApplication, new Runnable() {
        public void run() {
        }
    });

}
    ...

我认为问题是数据库连接问题,当然在运行模式下运行play时一切正常。如果我不使用 FakeApplication 那么它也很好,但我需要它。 startFakeApplication 方法中的所有数据库信息都来自 conf/application.conf 所以它们是正确的。

奇怪的是我在运行测试时在输出屏幕中也有这一行:

[info] play - datasource [jdbc:mysql://myhost/releaseDB?characterEncoding=UTF-8] bound to JNDI as DefaultDS

我在这里错过了什么重要的事情吗? 谢谢

最佳答案

您是否将设置映射传递给某处的 fakeApplication?像这样的东西:

FakeApplication fakeApplication = fakeApplication(settings);

另一种选择是拥有一个单独的 application-test.conf 文件,并在您的 build.sbt 文件中包含以下内容:

javaOptions in Test ++= Seq(
  "-Dconfig.file=conf/application-test.conf"
)

关于mysql - 使用 play2 框架运行 JUnit 测试时出现 mysql 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23514772/

相关文章:

junit - derby内存数据库+ junit

java - Maven Surefire 仅在命令行上确认 "forkMode"

java - 基于抽象语法树遍历的代码生成 JUnit

mysql - SQL 查询 - 如何将包含美元符号的文本字段仅转换为十进制(去掉美元符号)

python - Django:你如何阻止长查询杀死你的数据库?

java - 将单元测试标记为 JUnit 中的预期失败

swift - 对 NSDateFormatter 进行单元测试的好方法是什么?

mysql - 如何查询全部需要变量值的关系?

mysql - MySQL OLAP 多维数据集中的外部化时间维度?

unit-testing - 由于 "Illegal characters in path",.NET Core MSTest 失败