Java 为什么可以';在使用Maven运行Junit测试时,我是否可以访问src/test/resources?
我在运行以下代码时遇到问题:Java 为什么可以';在使用Maven运行Junit测试时,我是否可以访问src/test/resources?,java,junit4,mockito,Java,Junit4,Mockito,我在运行以下代码时遇到问题: configService.setMainConfig("src/test/resources/MainConfig.xml"); 从Junit@Before方法中 这就是Maven构建目标文件夹的方式吗?直接访问MainConfig.xml。src/test/resources目录内容放在类路径的根目录中 更准确地说:src/test/resources的内容被复制到target/test类,因此如果您有以下项目结构: . └── src └── tes
configService.setMainConfig("src/test/resources/MainConfig.xml");
从Junit@Before方法中
这就是Maven构建目标文件夹的方式吗?直接访问
MainConfig.xml
。src/test/resources
目录内容放在类路径的根目录中
更准确地说:src/test/resources
的内容被复制到target/test类
,因此如果您有以下项目结构:
.
└── src
└── test
├── java
│ └── foo
│ └── C.java
└── resources
├── a.xml
└── foo
└── b.xml
.
└── src
│ └── test
│ ├── java
│ │ └── mypackage
│ │ └── MyClassTest.java
│ └── resources
│ └── image.jpg
└── target
└── test-classes
├── image.jpg
└── mypackage
└── MyClassTest.class
它将产生以下测试类路径内容:
/foo/C.class
/a.xml
/foo/b.xml
getClass().getResource(“/MainConfig.xml”).getFile()
我猜setMainConfig
需要资源的路径,它将使用类加载器加载,而不是相对文件路径。如果您链接到这个神秘的configService.setMainConfig
方法的javadoc,将会有所帮助
如果我的猜测是正确的,那么路径应该是MainConfig.xml。Mave将
src/test/resources
的内容复制到target/testclasses
(IIRC)文件夹中。这个testclasses文件夹位于单元测试的类路径中 我今天遇到了同样的问题,我找到了一些解决办法
首先,这是我的文件结构:
.
└── src
└── test
├── java
│ └── foo
│ └── C.java
└── resources
├── a.xml
└── foo
└── b.xml
.
└── src
│ └── test
│ ├── java
│ │ └── mypackage
│ │ └── MyClassTest.java
│ └── resources
│ └── image.jpg
└── target
└── test-classes
├── image.jpg
└── mypackage
└── MyClassTest.class
什么不起作用:(Java 11 synthax)
在采用绝对路径并将src/test/resources/
作为前缀后,它也可以工作
摘要
这三种解决方案都可以工作,但在我看来,必须放入src/test/resources/
并不优雅,这就是为什么我更喜欢第二种解决方案(ClassLoader
)
资料来源:
getClass().getResource(“/MainConfig.xml”).getFile()
如果您使用Tycho和eclipse插件作为打包类型,请不要忘记在build.properties文件中添加src/test/resources。谢谢,但我在jenkins中运行junit,但它失败了,出于某种原因,src/test/resource中的文件将被复制到/target/classes,而不是/target/test classes。你的逻辑是正确的(见上面的评论),但不幸的是,我仍然无法让它工作
var classLoader = getClass().getClassLoader();
var url = classLoader.getResource("image.jpg"); // file:/home/<user>/../<project-root>/target/test-classes/image.jpg
var file = new File(url.getFile()); // /home/<user>/../<project-root>/target/test-classes/image.jpg
var anyFileUnderThisPath = file.exists(); // true
var absPath = new File("src/test/resources/image.jpg").getAbsolutePath();
var var anyFileUnderThisPath = new File(absPath).exists(); // true