Я столкнулся с проблемами при попытке заставить Java ClassLoader извлекать файлы JSON из каталога test/resources
после развертывания.
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 в автоматических сборках?