2016-02-12 140 views
1

我在Maven和Eclipse中的测试有问题。Maven - 覆盖测试资源文件夹

我从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

回答

2

有你尝试添加这对你的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。

记住有资源部分和testResource部分,你应该修改第二个指向正确的站点。

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

+0

感谢您的回复。这个:'C:\ Users \ Marcos \ AppData \ Local \ Temp \ classpath:\ WEB-INF \ test \ file'所以我再次出现了NPE,原因很明显:( – MarcosTonina

+0

加入testResource目录很可能解决了这个问题*假设*他正在使用后面提到的'getResource()'方法,顺便说一句,组合是保持测试灵活性的最佳方法。当你从一个构建测试转换到一个测试运行时,其他解决方案最终会打破(这是我最好的猜测,为什么他们需要在WEB-INF中) – Gus

+0

将我的测试从WEB-INF移动到另一个文件夹可能是一个选项您是否建议? – MarcosTonina

0

行家的基本原则是约定优于配置。你可能想问一个诚实的问题,为什么你不得不摆脱这个既定的惯例。

你尝试 “的src /主/ web应用/ WEB-INF /测试/文件”

更新: 我想你应该在你的测试用例日志System.getProperty( “user.dir来”)和确保文件是相对于打印的目录。

+0

感谢您的回复!我没有可能改变文件夹结构-sadly,这不是我的愿望 - 另一方面,我不知道为什么路径是C:\ ....而不是src/main/webapp ..所以我的测试文件被正确编译,问题出在我的资源上。 – MarcosTonina

+0

上面更新了答案。 – JVXR

+0

当我打印user.dir时,它附带:C:\ Users \ myUser \ AppData \ Local \ Temp – MarcosTonina

0

我觉得你的资源目录也不同。 所以请确保你已经设置好你的资源目录(不仅仅是你的源码目录)并使用getResourcesAsStream加载你的文件

+0

我没有配置在我的POM中包含任何资源:( – MarcosTonina