运行集成测试时加载不同的弹簧配置

时间:2013-05-22 11:53:05

标签: spring maven configuration hsqldb embedded-jetty

我有以下设置:通常我的webapp将部署在独立服务器上并连接到MySQL数据库。但是,我希望能够使用Selenium“自我测试”应用程序。因此,在 mvn clean install 期间,将有嵌入式服务器(Jetty 7),Selenium Server和内存数据库(HSQLDB),它们将允许执行某些操作(Web应用程序的示例用户输入)。 现在我已经使用maven插件设置了Selenium /嵌入式服务器设置:

<plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.10</version>
            <configuration>
                <!-- Log to the console. -->
                    <requestLog implementation="org.mortbay.jetty.NCSARequestLog">
                    <!-- This doesn't do anything for Jetty, but is a workaround for a Maven bug
                        that prevents the requestLog from being set. -->
                    <append>true</append>
                </requestLog>
            </configuration>
        </plugin>
        <!-- 
        *******************************************************
        Start selenium-server before the integration test start
        ******************************************************* 
        -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>selenium-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>start-selenium-server</id>
                    <phase>pre-integration-test</phase>
                        <goals>
                            <goal>start-server</goal>
                        </goals>
                        <configuration>
                            <background>true</background>
                            <logOutput>true</logOutput>
                            <multiWindow>true</multiWindow>
                        </configuration>
                </execution>
                <execution>
                    <id>stop-selenium-server</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>stop-server</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!-- ********************************************************
        Force to run the testcases in the integration-test phase
        ******************************************************** -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <!-- Skip the normal tests, we'll run them in the integration-test phase -->
                <skip>true</skip>
            </configuration>
            <executions>
                <execution>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skip>false</skip>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- ***********************************************************
        Deploy the war in the embedded jetty of cargo2-maven-plugin
        *********************************************************** -->
        <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <version>1.4.1-SNAPSHOT</version>
            <executions>
                <execution>
                    <id>start-container</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>start</goal>
                    </goals>
                </execution>
                <execution>
                    <id>stop-container</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>stop</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <wait>false</wait>
                <container>
                    <containerId>jetty7x</containerId>
                    <type>embedded</type>
                </container>
            </configuration>
        </plugin> 

它工作得很好。不幸的是,当在嵌入式服务器上部署应用程序以进行集成测试时,我在尝试使Spring / Maven使用不同的XML配置文件时遇到了一些问题。

我尝试使用:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:servlet-context-test.xml" })
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestWebapp extends SeleneseTestCase{

servlet-context-text.xml 位于 src / test / resources 中) 但是当Selenium测试运行时,webapp仍然以默认配置启动。

我正在尝试加载不同的xml文件,因为我基本上想要使用它:

<jdbc:embedded-database id="dataSource">
   <jdbc:script location="classpath:sql/schema.sql"/>
   <jdbc:script location="classpath:sql/fk.sql"/>
   <jdbc:script location="classpath:sql/data.sql"/>
</jdbc:embedded-database>

而不是我正常的dataSource声明。

2 个答案:

答案 0 :(得分:0)

您应该查看Spring配置文件(http://blog.springsource.org/2011/02/14/spring-3-1-m1-introducing-profile/)。使用配置文件,您可以以不同的方式激活/停用bean(以编程方式,使用环境变量等)。

答案 1 :(得分:0)

也许对那里的人有帮助。我最后使用Maven配置文件(用于集成测试和生产构建的单独配置文件)和过滤(在导入dataSource.xml或dataSourceIntegrationTesting.xml方面参数化我的servlet-context.xml)解决了这个问题。像魅力一样。