我正在研究一个较小的Gradle项目,并且想在Spock测试中使用我的Reader
类。当我开始测试时,Reader
类会抛出:
java.nio.file.NoSuchFileException
在我的Gradle项目中,我在test.txt
中有/src/test/resources
个文件。当我用Reader
进行测试时,Gradle会向我显示:
java.nio.file.NoSuchFileException: file:project_path/build/resources/test/test.txt
即使该路径中有一个文件。我同时使用终端和浏览器进行了检查。
我在Ubuntu上使用Java 11。
//Reader class read lines:
try (Stream<String> stream = Files.lines(Path.of(String.valueOf(getClass().getClassLoader().getResource(fileName)))))
//gradle.build without test dependencies
apply plugin: "java"
apply plugin: "groovy"
group = "com.example"
version = "1.0"
sourceCompatibility = "1.11"
repositories {
mavenCentral()
}
答案 0 :(得分:1)
更改您的Reader
读取逻辑:
try (Stream<String> stream = Files.lines(Path.of(ClassLoader.getSystemResource(fileName).toURI()))) {
...
}
Path.of()
将在使用URI时创建正确的路径: /project_path/build/resources/test/test.txt ,因为它将从URI中的协议指定的提供者中提取路径(文件:)。
但是,当您为Path.of()
参数调用String
时,它会假定它是真实路径(在您的情况下为 file:project_path / build / resources / test / test.txt )。