我目前正在为一个播放应用程序创建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() {
}
});
}
...
我认为问题是数据库连接问题,当然在运行模式下运行游戏时,一切都很好。如果我不使用FakeApplication那么它也没关系,但我需要它。 startFakeApplication方法中的所有数据库信息都来自conf / application.conf,因此它们是正确的。
奇怪的是,在运行测试时,我在输出屏幕中也有这一行:
[info] play - datasource [jdbc:mysql://myhost/releaseDB?characterEncoding=UTF-8] bound to JNDI as DefaultDS
我错过了重要的事情吗? THX
答案 0 :(得分:0)
您是否将设置地图传递给某处的fakeApplication?类似的东西:
FakeApplication fakeApplication = fakeApplication(settings);
另一种选择是拥有单独的application-test.conf
文件,并在build.sbt
文件中包含以下内容:
javaOptions in Test ++= Seq(
"-Dconfig.file=conf/application-test.conf"
)
答案 1 :(得分:0)
我的框架Acolyte提供了一个JDBC驱动程序&amp;专为此目的而设计的工具(模拟,测试......):http://acolyte.eu.org
它已经在一些开源项目(Anorm,Youtube Vitess,......)中使用,无论是使用vanilla Java还是使用其Scala DSL。
val jdbcUrl = "jdbc:acolyte:anything-you-want?handler=my-unique-id"
val handler = handleStatement.withQueryDetection(...).
withQueryHandler(/* which result for which query */).
withUpdateHandler(/* which result for which update */).
// Register prepared handler with expected ID 'my-unique-id'
acolyte.Driver.register("my-unique-id", handler);
// then ...
Connection con = DriverManager.getConnection(jdbcUrl);
// ... Connection |con| is managed through |handler|
// Or pass the JDBC url to Play config