@ Ralph的答案是最好的 - 在測試中使用單獨的彈簧環境。理想情況下,您應該將所有DAO bean及其依賴關係重構爲單獨的dao-beans.xml
,您可以將其包含在主應用程序上下文和測試環境中。
或者,您可以使用Spring Remoting將DAO bean從通過RMI或Jetty HTTP服務器通過添加ServiceExporter豆你的(真正的)應用程序上下文
<bean name="daoExporter"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service">
<ref bean="dao" />
</property>
<property name="serviceInterface" value="com.example.IDao" />
</bean>
和網絡定製的Spring遠程的servlet。XML
<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。
爲什麼不在測試中建立另一個上下文並使用dao類的不同實例?使用jetty插件描述的場景聽起來像Maven集成測試(故障安全插件)。 – mrembisz 2012-03-23 07:18:44
謝謝,但我特意避開Maven插件作爲一個實驗,使測試自成體系......此刻,您可以像運行其他任何測試一樣運行junit測試,而不需要maven或任何其他構建工具來管理事件......這是來自Mavens集成測試模型在許多項目中經歷的痛苦。我可能會把它移到Gradle,所以我可以在不同類型的測試之間進行更多的分離,而不是maven提供的。 – sMoZely 2012-03-23 22:16:56