Maven集成测试具有Spring依赖性

时间:2015-08-31 13:24:12

标签: java eclipse spring maven unit-testing

我有一个项目结构,我有两个以下(Mavenized)项目:

数据库 - 该项目是一个Spring项目,负责管理与webapp数据库的交互。它包含用于与数据库交互的代码,以及许多服务类。这里的Application Context包含数据库连接信息,以及每个服务类的bean。

WebApp - 这个项目是一个JSF项目,只包含UI内容。

对于数据库项目的单元测试,我有一个测试应用程序上下文,它与一个非常简单的内存数据库类结构进行通信,因此不修改真正的数据库。该项目的测试部分还包含内存数据库的结构。

文件结构:

src/main/java/...
src/main/resources/spring/applicationContext.xml
src/test/java/...
src/test/resources/spring/applicationContext.xml

我想为WebApp项目创建自动化集成测试,该项目仍然使用内存数据库内容,以及来自Database项目的测试Application Context。遗憾的是,Maven没有为WebApp项目提供数据库项目的测试代码,因此甚至无法访问它。

我试着通过将maven-jar-plugin与test-jar目标一起使用来解决这个问题,并在Eclipse中添加了test-jar作为依赖项(因为我读过这个问题),但Eclipse给了我众所周知:“不完全支持对类型为test-jar的项目数据库的依赖。可能会出现类路径和/或部署问题。请尝试Maven->禁用工作空间解析”消息,并且在进行更改时不更新依赖关系代码到数据库项目,这意味着我每次在数据库项目中对WebApp项目中的测试代码进行更改以处理更改时都必须执行Maven构建。

数据库项目:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <goals>
                <goal>test-jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

WebApp项目:

<dependency>
    <groupId>...</groupId>
    <artifactId>database</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>test-jar</type>
    <scope>test</scope>
</dependency>

此外,Maven Clean不再适用于Database项目,因为它说它无法删除测试jar。此外,命令行不会使用Database test jar运行测试,因此WebApp项目上的Maven Install失败。

我该怎么做才能使这项工作成功?我听说过将测试代码放到自己的项目中并将其他项目用作测试依赖项,但这对我不起作用,因为WebApp项目需要使用Database项目测试Application Context,所以问题更多而不仅仅是访问数据库项目的测试代码。

1 个答案:

答案 0 :(得分:0)

如果您需要在webapp项目中使用src / test代码,只需使用这样的分类器添加依赖项

<dependency>
    <groupId>...</groupId>
    <artifactId>database</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <classifier>tests</classifier>
    <scope>test</scope>
</dependency>

然后,您应该能够访问测试WebApp所需的一切。