@ 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