Maven中的单元测试需要访问src/main/webapp目录

rhi*_*nds 12 java maven-2 unit-testing spring-mvc

我正在尝试对我在Maven/Eclipse中开发的webapp进行单元测试.它是一个Spring MVC webapp,我需要一些单元测试来测试我的模型控制器.

为此,我需要使用我的webapp配置.xml文件来注入控制器,但是,我的所有配置(以及配置引用的其他相关文件)都在src/main/webapp目录中(根据Maven惯例) - 这里有很多文件我需要在我的测试中引用,但是在运行测试时它们不可用,因为它们不在类路径上(Maven似乎只是添加了src/main/java,src/test/java,src/main/resources,src/test /资源到类路径但不是src/main/webapps)

我不想将我的整个webapp复制到我的src/test/resources文件夹中只是为了测试 - 有没有其他方法可以访问它们?

我可以通过更改Eclipse"运行配置"以在类路径中包含此文件夹来解决这个问题,但是从命令行运行测试时这不起作用?

有人遇到过这种情况么?有没有明智的解决方案?

谢谢!

Emi*_*Sit 6

通常,您应该使用模拟(例如,EasyMock或jMock)来处理控制器的单元测试; 单元测试应该与系统的其余部分隔离地测试组件.在Spring 3中,您可以将控制器定义为带有注释的POJO,然后只需测试控制器而无需Spring的任何交互.

如果您希望进行更多的集成级测试,那么您可以将配置文件的公共部分放在src/main/resources中,以便它们可以在类路径中访问.然后在src/test/resources中使用测试特定配置进行测试.该文件可以将这些文件与您需要的任何内容一起导入,也可以使用@ContextConfiguration注释您的测试用例,以指定组装上下文所需的多个文件.

有关具体示例,请参阅有关集成测试Spring MVC的博客文章.Spring手册测试章节也对Spring中的集成测试有一个很好的概述.


Mar*_*ark 5

您可以使用 maven-surefire-plugin 来实现此目的,如下所示:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <additionalClasspathElements>
                <additionalClasspathElement>src\main\webapp\</additionalClasspathElement>
            </additionalClasspathElements>
        </configuration>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

现在您可以通过以下方式访问您的 web.xml:

getClass().getClassLoader().getResourceAsStream("classpath:webapp/WEB-INF/web.xml")
Run Code Online (Sandbox Code Playgroud)