在集成测试期间运行具有不同配置的Spring MVC webapp

时间:2013-01-20 00:11:46

标签: maven spring-mvc

我正在使用maven-jetty-plugin在Maven构建的integration-test阶段运行我的Spring MVC webapp,并对其进行各种测试。在这一点上,我希望能够切换出一些Spring配置,这样我就可以在集成测试期间指出不同的bean实现。这样我就可以更改要运行的数据库,而不是使用生产连接设置。

我应该考虑采用哪种方法?我应该尝试在servlet-context.xml文件上使用资源过滤吗?我应该有两个不同的配置文件吗?如何让它与Jetty插件很好地配合使用?

编辑:我正在考虑使用Spring的基于Java的@Configuration注释优先于XML servlet-context文件,并根据环境变量切换我构建的bean类型或类似,但这也感觉不对。

2 个答案:

答案 0 :(得分:1)

我建议使用spring profile + maven过滤:

  1. 在pom.xml中定义一个可以通过命令行覆盖的属性:-Dspring.profile.active = development

         <properties>
                <spring.profile.active>test</spring.profile.active>
         </properties>
    
  2. 在pom.xml中添加资源过滤。确保您的web.xml位于目录src / main / resources中。

     <resources>  
           <resource>  
             <directory>src/main/resources</directory>  
             <filtering>true</filtering>  
           </resource>  
     </resources> 
    
  3. 激活web.xml中的特定spring配置文件,$ {spring.profile.active}将在过滤后被替换。

    <context-param>  
        <param-name>spring.profiles.active</param-name>  
        <param-value>${spring.profile.active}</param-value>  
    </context-param> 
    
  4. 在spring profile中定义bean

    <beans profile="production">  
         <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/>  
    </beans>  
    

答案 1 :(得分:0)

以前,我总是创建一个包含jetty-maven-plugin配置和集成测试配置的配置文件。

但是当我了解spring-test-mvc时,我转而使用它,因为你想在使用jetty-maven-plugin的集成测试中实现的一切都可以实现。此外,您可以模拟所需的服务(例如,在不同的应用程序中进行身份验证)。

所以我建议切换到spring-test-mvc。恕我直言,jetty-maven-plugin风格非常痛苦。