2012-09-12 81 views
7

我構建了一個Spring應用程序,當我從Web瀏覽器運行JUnit測試時,需要檢查內存數據庫H2。在Spring應用程序中運行junit測試時訪問h2 web控制檯

在我的Spring配置中,我有一個bean,它負責創建我的數據庫模式並使用一些將在我的JUnit測試中使用的數據填充它。我還在我的測試環境中添加了一個bean,它創建了一個Web服務器,我最終將查找我的數據。因爲數據庫是正確填充,因爲我可以從我的JUnit測試訪問其數據和H2服務器只運行,而我在我的測試階段

<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> 

似乎一切都OK(我能知道,因爲如果我嘗試在調試我的測試之前訪問my_ip:111111我無法連接,但是一旦我開始測試,我就可以連接)。

無論如何,如果我從網絡瀏覽器打開我的H2控制檯,其中不顯示任何模式。有任何想法嗎??

非常感謝!

+1

你在單元測試中的jdbcUrl是什麼樣的? – michael

+0

嗨邁克爾, 謝謝你的回答。我的jdbc URL看起來像jdbc:h2:mem:my_DB; DB_CLOSE_DELAY = -1; MODE = Oracle 我也嘗試在jdbc URL中添加IFEXIST屬性,以防萬一可以幫助我。它不能:( –

+0

你好@Ivan Fernandez你能告訴我們你是如何解決這個問題的嗎?我面臨着同樣的問題,你的回答是非常感謝,謝謝!! – ROCKY

回答

2

我想問題是你直接從你的應用程序連接到h2db。不是通過您使用bean啓動的服務器。因此,您的應用程序和h2db-web-interface無法共享一個內存數據庫。

你應該在測試中改變JDBCURL爲類似jdbc:h2:tcp://localhost/mem:my_DB;DB_CLOSE_DELAY=-1;MODE=Oracle並在瀏覽器,您應該連接到相同的URL。

使用JDBC的URL像jdbc:h2:tcp://localhost/...所有的連接將通過h2db服務器,您可以在瀏覽器中查看數據庫狀態。

6

由於這很可能將是一個測試調試功能,可以在運行時與您@Before添加:

import org.h2.tools.Server; 

/* Initialization logic here */ 

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

,然後連接到http://localhost:8082/

2

對於未來參考這裏的另一種方法來做到這一點:

  1. 啓動數據庫和Web服務器(版本可能不同):

    $ 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. 組數據庫的URL爲代碼jdbc:h2:tcp://localhost:9092/mem:mytest測試。

  3. 運行或調試測試。在瀏覽器窗口中
  4. 點擊Connect其中步驟打開1

JAR文件H2可以在https://mvnrepository.com/artifact/com.h2database/h2下載。

服務器可以通過@Before在測試文件中啓動,就像snovelli的回答一樣,但只有在連接數據庫後才能建立,這可能是一個問題。

相關問題