2012-09-12 11 views
7

Sto creando un'applicazione Spring e ho bisogno di ispezionare il mio database in memoria H2 mentre eseguo i miei test JUnit da un browser web.Accesso alla console Web h2 durante l'esecuzione del test junit in un'applicazione Spring

Nella mia configurazione di Spring ho un bean che è responsabile della creazione del mio schema di database e popolamento con alcuni dati che verranno utilizzati all'interno dei miei test JUnit. Ho anche aggiunto un bean nel mio contesto di test che crea un server web in cui alla fine cercherò i miei dati.

<bean id="org.h2.tools.Server-WebServer" class="org.h2.tools.Server" 
    factory-method="createWebServer" init-method="start" lazy-init="false"> 
    <constructor-arg value="-web,-webAllowOthers,-webPort,11111" /> 
</bean> 

Tutto sembra ok perché il database è popolato correttamente dato che posso accedere ai suoi dati dai miei test JUnit e H2 Server funziona solo mentre io sono nel mio test di fase (posso sapere che, perché se prova ad accedere a my_ip: 111111 prima di eseguire il debug dei miei test non riesco a connnect ma posso connettermi dopo aver iniziato i miei test).

Ad ogni modo Se apro la mia console H2 da un browser web non viene mostrato alcun schema. Qualche idea??

Molte grazie !!

+1

Che aspetto ha il tuo jdbcUrl in unit test? – michael

+0

Ciao Michael, grazie per la risposta.Il mio URL jdbc è simile a jdbc: h2: mem: my_DB; DB_CLOSE_DELAY = -1; MODE = Oracle Ho anche provato ad aggiungere la proprietà IFEXIST nell'URL jdbc nel caso in cui ciò potrebbe aiutarmi. Non poteva :( –

+0

Ciao @Ivan Fernandez puoi farci sapere come hai risolto questo problema? Sto affrontando lo stesso problema .Si rispondi è molto apprezzato.Grazie !! – ROCKY

risposta

2

Immagino che il problema sia che ci si connette a h2db direttamente dalla propria applicazione. Non attraverso il server che si sta avviando con bean. Per questo motivo la tua app e h2db-web-interface non possono condividere un database in memoria.

È necessario modificare jdbcUrl nei test per qualcosa come jdbc:h2:tcp://localhost/mem:my_DB;DB_CLOSE_DELAY=-1;MODE=Oracle e nel browser è necessario connettersi allo stesso URL.

Con gli url jdbc come jdbc:h2:tcp://localhost/... tutte le connessioni passano attraverso il server h2db ed è possibile visualizzare lo stato del database nel browser.

6

Poiché questa è destinata probabilmente ad essere una caratteristica di test-debug, è possibile aggiungerlo in fase di esecuzione con il tuo @Before:

import org.h2.tools.Server; 

/* Initialization logic here */ 

@Before 
public void initTest(){ 
    Server webServer = Server.createWebServer("-web", 
            "-webAllowOthers", "-webPort", "8082"); 
    webServer.start(); 
} 

e quindi connettersi a http://localhost:8082/

2

per futuro riferimento qui è un altro modo per farlo:

  1. Avviare database e web server (versione possono differire):

    $ cd .../maven_repository/com/h2database/h2/1.4.194 $ java -cp h2-1.4.194.jar org.h2.tools.Server -tcp -web -browser TCP server running at tcp://169.254.104.55:9092 (only local connections) Web Console server running at http://169.254.104.55:8082 (only local connections)

  2. Set database di URL per i test nel codice per jdbc:h2:tcp://localhost:9092/mem:mytest.

  3. Eseguire o eseguire il debug dei test.
  4. Clicca Connect nella finestra del browser che ha aperto nel passaggio 1.

file JAR per H2 può essere scaricato dal https://mvnrepository.com/artifact/com.h2database/h2.

Il server può essere avviato tramite @Before nel file di test come nella risposta di snovelli, ma solo nel caso in cui la connessione al database sia stabilita successivamente, il che potrebbe essere un problema.

Problemi correlati