与dbunit和jetty的集成测试 - dbunit没有填充表

时间:2012-09-03 07:26:15

标签: testing maven integration-testing dbunit

您好我正在尝试进行集成测试 我使用jetty作为容器和dbunit来填充内存数据库中的HSQLDB 我用来填充带有dataset.xml文件的数据库的代码可以工作,因为我在单元测试中使用它,所以如果有人可以查看它并给我一些建议,我将非常感激。 这是pom和我的代码的相关部分。

的pom.xml

<plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.26</version>
            <configuration>
                <scanIntervalSeconds>10</scanIntervalSeconds>
                <stopKey>foo</stopKey>
                <stopPort>9999</stopPort>
                <contextPath>/messages</contextPath>
                <connectors>
                    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                        <port>8080</port>
                        <maxIdleTime>60000</maxIdleTime>
                    </connector>
                </connectors>
                <webApp>
                    ${basedir}/target/messages
                </webApp>
                <scanIntervalSeconds>0</scanIntervalSeconds>
                <daemon>true</daemon>

                <scanTargetPatterns>
                    <scanTargetPattern>
                        <directory>
                           ${basedir}/target/test-classes/integrationtest/
                        </directory>
                        <includes>
                            <include>**/*.properties</include>
                            <include>**/*.xml</include>
                        </includes>
                    </scanTargetPattern>
                </scanTargetPatterns>
            </configuration>
            <executions>
                <execution>
                    <id>start-jetty</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
                <execution>
                    <id>stop-jetty</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>stop</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                    <version>1.1.1</version>
                </dependency>
                <dependency>
                    <groupId>commons-dbcp</groupId>
                    <artifactId>commons-dbcp</artifactId>
                    <version>1.2.2</version>
                </dependency>
                <dependency>
                    <groupId>org.hsqldb</groupId>
                    <artifactId>hsqldb</artifactId>
                    <version>2.2.8</version>
                </dependency>
            </dependencies>
        </plugin>



代码:

 @BeforeClass
  public static void init() throws Exception {
Context ctx = new InitialContext();

ctx.createSubcontext("jdbc");

BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(org.hsqldb.jdbcDriver.class.getName());
dataSource.setUrl("jdbc:hsqldb:mem:MESSAGES");
dataSource.setUsername("sa");
dataSource.setPassword("");

ctx.bind("jdbc/messages", dataSource);

databaseTester = new DataSourceDatabaseTester(dataSource);
createTables(databaseTester.getConnection().getConnection());

databaseTester.setDataSet(getDataSet());
databaseTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT);
databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL);

databaseTester.onSetup();

}

欢呼声

1 个答案:

答案 0 :(得分:0)

集成测试在与Jetty服务器不同的JVM中运行,因此内存数据库将为集成测试和Jetty服务提供不同的数据集。

最好的办法是在target/somedir中使用磁盘数据库,并让测试和servlet容器通过hsql prototcol访问该数据库。

并更改您的jdbc uris以引用服务器和端口。

对于上述结果,此plugin看起来可能有用。虽然作者尚未将其发布到中央存储库(耻辱)。你可以使用exec-maven-plugin启动hsqldb,如果你不能说服该插件的作者将其推送到中心而你想要一个其他人可以使用的构建

另一种方法是让您的测试用例开始&amp;自己停止码头。