kol*_*len 2 unit-testing h2 playframework ebean playframework-2.0
我试图在MySQL兼容模式下使用H2数据库在Play 2应用程序中运行单元测试.我配置@Before如下:
@Before
public void startApp() throws Exception {
Map<String, String> settings = new HashMap<String, String>();
settings.put("db.default.driver", "org.h2.Driver");
settings.put("db.default.user", "sa");
settings.put("db.default.password", "");
settings.put("db.default.url", "jdbc:h2:mem:play-test-351881363;MODE=MySQL"); // TODO: use config for url
settings.put("db.default.jndiName", "DefaultDS");
app = Helpers.fakeApplication(settings);
Helpers.start(app);
databaseTester = new JndiDatabaseTester("DefaultDS");
IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(play.Play.application()
.resourceAsStream("/resources/dataset.xml"));
databaseTester.setDataSet(expectedDataSet);
databaseTester.onSetup();
}
@After
public void stopApp() throws Exception {
databaseTester.onTearDown();
Helpers.stop(app);
}
Run Code Online (Sandbox Code Playgroud)
但它在java.lang.RuntimeException: DataSource user is null?尝试访问数据库时导致实际测试方法:
[ERROR] [02/12/2013 01:19:32.085] [application-akka.actor.default-dispatcher-4] [akka://application/user/load_data_task_runner_test/load_record] DataSource user is null?
java.lang.RuntimeException: DataSource user is null?
at com.avaje.ebeaninternal.server.lib.sql.DataSourcePool.<init>(DataSourcePool.java:184)
at com.avaje.ebeaninternal.server.lib.sql.DataSourceManager.getDataSource(DataSourceManager.java:200)
at com.avaje.ebeaninternal.server.lib.sql.DataSourceGlobalManager.getDataSource(DataSourceGlobalManager.java:46)
at com.avaje.ebeaninternal.server.core.DefaultServerFactory.getDataSourceFromConfig(DefaultServerFactory.java:432)
at com.avaje.ebeaninternal.server.core.DefaultServerFactory.setDataSource(DefaultServerFactory.java:393)
at com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:169)
at com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:124)
at com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:64)
at com.avaje.ebean.EbeanServerFactory.create(EbeanServerFactory.java:45)
at com.avaje.ebean.Ebean$ServerManager.getWithCreate(Ebean.java:206)
at com.avaje.ebean.Ebean$ServerManager.get(Ebean.java:193)
at com.avaje.ebean.Ebean$ServerManager.access$200(Ebean.java:128)
at com.avaje.ebean.Ebean.getServer(Ebean.java:257)
at play.db.ebean.Model$Finder.server(Model.java:240)
at play.db.ebean.Model$Finder.byId(Model.java:261)
at integration.LoadRecordService.onReceive(LoadRecordService.java:50)
at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:159)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425)
at akka.actor.ActorCell.invoke(ActorCell.scala:386)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230)
at akka.dispatch.Mailbox.run(Mailbox.scala:212)
at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:502)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
Run Code Online (Sandbox Code Playgroud)
这里使用dbunit工作的演进和初始化startApp(),在@Test方法中抛出异常.
我做错了什么?
PS我没有使用,play.test.Helpers.running因为它Runnable作为参数,run()在runnable中不能抛出异常.所以要赶在单元测试例外,我必须包住整个run()成try,捕获异常,故障单元测试和手动登录信息.它膨胀了很多代码.这是代码running():
public static synchronized void running(FakeApplication fakeApplication, final Runnable block) {
try {
start(fakeApplication);
block.run();
} finally {
stop(fakeApplication);
}
}
Run Code Online (Sandbox Code Playgroud)
我做同样的我@Before和@After,也许除了一些线程的东西,可能是错误的原因.
kol*_*len 14
问题是由ebean.default配置中的密钥在主配置中注释掉的:
ebean.default="models.*"
Run Code Online (Sandbox Code Playgroud)
并且设置H2的用户和密码不是必需的,它没有它的工作:
settings.put("db.default.user", "sa");
settings.put("db.default.password", "");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8322 次 |
| 最近记录: |