我一直在尝试引导 Java ClassLoader 从test/resources部署后的目录中检索 JSON 文件时遇到问题。
public class TestFileUtil {
private static final ClassLoader classLoader = TestFileUtil.class.getClassLoader();
public static Map<String, Object> getJsonFileAsMap(String fileLocation) {
try {
return new ObjectMapper().readValue(getTestFile(fileLocation), HashMap.class);
} catch (IOException e) {
throw new RuntimeException("Error converting JSON file to a Map", e);
}
}
private static File getTestFile(String fileLocation) {
return new File(classLoader.getResource(fileLocation).getFile());
}
}
该实用程序在使用 Mockito 进行本地测试期间没有问题,如下所示:
public class LocalTest {
@Before
public void setUp() {
Mockito.when(mockDataRetrievalService.getAssetJsonById(Mockito.any())).thenReturn(TestFileUtil.getJsonFileAsMap("test.json"));
}
}
但是,在我们部署的环境中构建时,这一行会引发 FileNotFound 异常。
使用相对目录路径时"../../test.json",我在两种环境中都看到 FileNotFound 异常。
本地目录结构:
test
| java
| |- project
| | |- LocalTest
| |- util
| | |- TestFileUtil.class
| resources
| |- test.json
部署后:
test
| com
| | project
| | | dao
| | | | LocalTest
| | other project
| | | | util
| | | | | TestFileUtil.class
| | | | | test.json
在自动构建中使用 ClassLoader 是否有任何特殊行为或所需的目录结构?
温温酱
相关分类