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.

InformationsquelleAutor kolen | 2013-02-11
Schreibe einen Kommentar