【问题标题】:Maven - Override test resource folderMaven - 覆盖测试资源文件夹
【发布时间】:2016-02-12 17:59:53
【问题描述】:

我在 Maven 和 Eclipse 中的测试有问题。

我从 Eclipse 运行我的测试套件,一切正常,但是当我运行时

mvn test

我有一个异常,当我试图读取测试用例中的一些文件时,它会出现,如下所示:

final File javaFolder = new File("WEB-INF/test/file");

当我这样做时,我有一个空指针异常和调试我看到路径是

C:\Users\myUser\AppData\Local\Temp\WEB-INF\test\file

另外,我认为我覆盖了我的 pom 中的测试目录很重要,因为我们需要在一个特殊的地方测试源。我们是这样做的:

<testSourceDirectory>WEB-INF/test/java</testSourceDirectory>

所以我的问题是:为什么使用 Maven 运行测试没有得到正确的工作目录?我可以定义一个特定的文件夹来读取一些文件吗?我试过像

getClass().getResource("myFile").getFile() 

但是当我打印绝对路径时,我又得到了C:\Users\myUser\AppData\Local...\myFile

编辑:我没有机会遵循约定,因为我说的是一个从未使用过 Maven 的大系统,因此无法更改所有目录结构。可悲的是,这不是我的意愿。

此外,当我打印“user.dir”时,我有:C:\Users\myUser\AppData\Local\Temp

Edit2:我的项目路径在另一个分区E:\work\myProject

【问题讨论】:

    标签: java eclipse maven


    【解决方案1】:

    您是否尝试将其添加到您的 pom.xml 中

           <testResources>
                <testResource>
                    <directory>${basedir}/src/main/WEB-INF/test/file</directory>
                </testResource>
                <testResource>
                    <directory>${basedir}/src/main/WEB-INF/test/java</directory>
                    <excludes>
                        <exclude>**/*.java</exclude>
                    </excludes>
                </testResource>
            </testResources>
    

    将此添加到构建部分,它可以让您指定 testResource 文件夹的位置以及测试类的位置。考虑检查这个link,有一个例子here可以帮助你创建pom.xml。

    记住有resource section和testResource section,你应该修改第二个指向正确的站点。

    也可以考虑使用final File javaFolder = new File("classpath:/WEB-INF/test/file");

    【讨论】:

    • 感谢您的回复。我有这个:C:\Users\Marcos\AppData\Local\Temp\classpath:\WEB-INF\test\file所以我再次有一个 NPE,原因很明显:(
    • 添加testResource目录很有可能解决假设他使用帖子中提到的getResource()方法的问题。顺便说一句,组合是保持测试灵活的最佳方式。当您从构建测试更改为作为 Web 应用程序运行的测试时,其他解决方案最终会崩溃(这是我对它们为什么需要在 WEB-INF 中的最佳猜测)
    • 将我的测试从 WEB-INF 移动到另一个文件夹可能是一种选择。你推荐吗?
    • 你绑定了 Class.getClassLoader().getResource("/WEB-INF/test/file"),而不是硬编码“类路径”
    【解决方案2】:

    maven 的基本原则是约定优于配置。您可能想问一个诚实的问题,为什么您必须打破既定的惯例。

    你试过“src/main/webapp/WEB-INF/test/file”

    更新: 我认为您应该在测试用例中记录 System.getProperty("user.dir") 并确保该文件与打印的目录相关。

    【讨论】:

    • 感谢您的回复!我无法更改文件夹结构-遗憾的是,这不是我的目标-另一方面,我不知道为什么路径是 C:\.. 而不是 src/main/webapp.. . 所以我的测试文件编译正确,问题出在我的资源上。
    • 上面更新了答案。
    • 当我打印 user.dir 时,它带有:C:\Users\myUser\AppData\Local\Temp
    • 你的项目的绝对路径是什么?
    • E:\work\myProject 所以在另一个分区!很奇怪:(
    【解决方案3】:

    我认为您的资源目录也不同。 因此,请确保您已设置资源目录(不仅是源目录)并使用 getResourcesAsStream 加载文件

    【讨论】:

    • 我的 pom 中没有包含任何资源的配置:(
    猜你喜欢
    • 2019-04-11
    • 2011-12-26
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多