Play 2 framework unit-tests - java.lang.RuntimeException: DataSource user gleich null ist?
Ich versuche zum ausführen von unit-tests in Spielen 2-Anwendung mit H2-Datenbank in MySQL-Kompatibilität-Modus. Ich konfigurierte es in @Before
wie folgt:
@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);
}
Aber es führt java.lang.RuntimeException: DataSource user is null?
im aktuellen test Methode auf, wenn es versucht, Zugriff auf Datenbank:
[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)
Hier Entwicklungen und Initialisierung mit dbunit Arbeit in startApp()
, - Ausnahme wird ausgelöst, in einem @Test
Methode.
Was mache ich falsch?
P. S. ich bin nicht mit play.test.Helpers.running
denn es dauert Runnable
als parameter run()
im Thread keine exceptions werfen. So abfangen von Ausnahmen in Einheit testen muss ich wickeln gesamten run()
in try
, exceptions fangen, scheitern, unittest und log-Nachricht manuell. Es bläst code viel. Hier ist der code, der running()
:
public static synchronized void running(FakeApplication fakeApplication, final Runnable block) {
try {
start(fakeApplication);
block.run();
} finally {
stop(fakeApplication);
}
}
Tue ich das gleiche in meinem @Before
und @After
, ausgenommen vielleicht einige threading-Zeug, dass kann Ursache von Fehlern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Problem wurde verursacht durch
ebean.default
Schlüssel in der Konfiguration wurde auskommentiert in der main config:Und Einstellung von Benutzer und Kennwort für die H2 ist nicht notwendigen, funktioniert es ohne ihn: