Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有Spring依赖关系的Maven集成测试_Java_Eclipse_Spring_Maven_Unit Testing - Fatal编程技术网

Java 具有Spring依赖关系的Maven集成测试

Java 具有Spring依赖关系的Maven集成测试,java,eclipse,spring,maven,unit-testing,Java,Eclipse,Spring,Maven,Unit Testing,我有一个项目结构,其中我有以下两个Mavenized项目: 数据库-这个项目是一个Spring项目,它管理与webapp数据库的交互。它包含与数据库交互的代码,以及许多服务类。这里的应用程序上下文包含数据库连接信息,以及每个服务类的bean 这个项目是一个JSF项目,它只包含UI内容 对于数据库项目的单元测试,我有一个测试应用程序上下文,它与一个非常简单的内存中类似数据库的结构进行通信,因此真实的数据库不会被修改。该项目的测试部分还包含内存中数据库的结构 文件结构: src/main/java/

我有一个项目结构,其中我有以下两个Mavenized项目:

数据库-这个项目是一个Spring项目,它管理与webapp数据库的交互。它包含与数据库交互的代码,以及许多服务类。这里的应用程序上下文包含数据库连接信息,以及每个服务类的bean

这个项目是一个JSF项目,它只包含UI内容

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

文件结构:

src/main/java/...
src/main/resources/spring/applicationContext.xml
src/test/java/...
src/test/resources/spring/applicationContext.xml
我想为WebApp项目创建自动集成测试,该项目仍然使用内存中的数据库内容,以及来自数据库项目的测试应用程序上下文。不幸的是,Maven没有向WebApp项目提供数据库项目的测试代码,因此它甚至不可访问

我尝试通过使用maven jar插件和测试jar目标来解决这个问题,并在Eclipse中添加了测试jar作为一个依赖项,因为我读到这篇文章是为了解决这个问题,但是Eclipse给了我一个众所周知的问题:不完全支持对带有测试jar类型的项目数据库的依赖项。可能会出现类路径和/或部署问题。尝试Maven->Disable Workspace Resolution message,并且在我更改数据库项目时不更新依赖项代码,这意味着每次我在数据库项目中更改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不再适用于数据库项目,因为它说它不能删除测试jar。此外,命令行不使用数据库测试jar运行测试,因此WebApp项目上的Maven安装失败


我该怎么做才能让它工作?我听说过将测试代码放在自己的项目中,并将另一个项目用作测试依赖项,但这对我不起作用,因为WebApp项目需要使用数据库项目的测试应用程序上下文,因此,问题不仅仅是访问数据库项目的测试代码。

如果您在webapp项目中需要src/test代码,只需添加一个具有如下分类器的依赖项即可

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

然后,您应该能够访问测试WebApp所需的所有内容。

我可能已经获得了这些内容,以便与您的答案一起使用。当我第一次尝试时,它仍然使用非测试应用程序上下文,但是当我将测试应用程序上下文复制到WebApp的测试资源时,内存中的数据库开始被使用。Maven Install现在可以在Eclipse中为这个项目工作,但我还没有在命令提示符下尝试它。我还需要数据库项目中的Maven-Jar插件配置才能工作吗?事实上,tests-Jar是通过与Maven的包阶段链接的test-Jar目标构建的。如果您的代码库开始增长,我建议将这种插件配置放在父pom中,这样您就不必在每个项目中重复自己。