Если java.net.URL
используется в приложении Spring Boot с протоколом classpath
, оно работает должным образом, поскольку Spring Boot регистрирует URLStreamHandlerFactory
.например, new URL("classpath: someFile.whatever")
.
Но когда этот код выполняется как тест JUnit, генерируется исключение java.net.MalformedURLException: unknown protocol: classpath
.
Кажется, что соответствующий URLStreamHandlerFactory
не зарегистрирован при инициализации контекста Springдля теста JUnit.
Шаги для воспроизведения:
1) Создайте проект Spring Boot Starter (например, используя только стартовый Web).
2) добавьте test.json
файл вsrc/main/resources
3) Добавьте следующий bean-компонент:
@Component
public class MyComponent {
public MyComponent() throws MalformedURLException {
URL testJson = new URL("classpath: test.json");
System.out.println(testJson);
}
}
4) Запуск приложения как Java-приложения работает ОК
5) Запустите стандартный тест contextLoads:
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringUrlTestApplicationTests {
@Test
public void contextLoads() {
}
}
java.net.MalformedURLException: unknown protocol: classpath
выдается исключение.
Как правильно использовать URL с ресурсами classpath в тесте JUnit?
В реальном случае использованияЯ не могу изменить new URL("classpath: test.json")
, потому что он поступил из сторонней библиотеки.
Попытался скопировать test.json
в src/test/resources
, чтобы проверить, может ли ошибка быть вызвана отсутствующим ресурсом - безуспешно.