簡體   English   中英

JUnit測試啟動Jetty,Jetty啟動Spring,可以測試查看spring應用程序上下文

[英]JUnit test starts Jetty, Jetty starts Spring, can test see spring application context

這是對由Jetty / Spring驅動的整個系統的一些高級Web / Rest測試。

我正在嘗試做的是一個完全獨立的測試,

  • 啟動碼頭,啟動應用程序
  • 春季申請開始
  • 測試使用Webdriver / RestAssured打應用程序並測試行為
  • 測試檢查數據庫是否有更改的數據

我想做的是讓整個事情在單個JVM中運行,即我正在啟動org.eclipse.jetty.server.Server。
這是因為它很容易,並且避免了測試具有外部依賴性(例如啟動Jetty)

這一切都很酷,但是我討厭必須手動檢查數據庫……我想使用我的DAO(或者也許是服務層)類,所以我不會重寫數據庫代碼。

由於我的DAO已由Spring在與測試用例相同的JVM中的Jetty實例中啟動,因此我想獲取該ApplicationContext,然后取出我的DAO bean。

我有點無法獲得ApplicationContext,因為測試不是每個人所說的“春季”測試。

人們對如何執行此操作有任何想法?

我認為,如果正常啟動,則無法在碼頭上訪問spring上下文,如果您使用某些嵌入式服務器,則可能可以工作。

但是我認為有更簡單的解決方案:

  • 使用第二個(不同的)spring上下文進行測試,它可以比“正常”的上下文小,因為您不需要所有的服務和控制器,或者
  • 在您的服務器中添加一些json或webservice查詢接口,該接口僅從數據庫返回請求的結果。 然后,您可以通過服務器中的該接口從測試中訪問數據庫。 -我認為您每個實體只需要兩個或三個不同的查詢,因此應該沒那么多工作,(但我希望使用其他解決方案)。

@Ralph的答案是最好的-在測試中使用單獨的spring上下文。 理想情況下,您應該將所有DAO bean及其依賴項重構為單獨的dao-beans.xml ,可以將其包含在主應用程序上下文和測試上下文中。

另外,您可以使用Spring Remoting通過將ServiceExporter bean添加到您的(實際)應用上下文中,通過RMI或HTTP從Jetty服務器導出DAO bean。

<bean name="daoExporter"
        class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
    <property name="service">
        <ref bean="dao" />
    </property>
    <property name="serviceInterface" value="com.example.IDao" />
</bean>

和web.xml中的自定義Spring遠程處理servlet

<servlet>
    <servlet-name>daoServiceExporter</servlet-name>
    <servlet-class>org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>daoServiceExporter</servlet-name>
    <url-pattern>/remoting/dao</url-pattern>
</servlet-mapping>

然后將其導入到您的測試上下文中

<bean id="dao" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
    <property name="serviceInterface" value="com.example.IDao" />
    <property name="serviceUrl" value="http://localhost:8080/remoting/dao"/>
</bean>

這僅是一個更好的答案,例如,如果需要花費很長的時間來加載Spring上下文,或者也許您有一些必須保持單例的bean。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM