I am trying to migrate a library to java 10 but I have some errors regarding Mockito and Byte Buddy. Here is the piece of registration logic of
java.sql.Driver underlayingDriver = mock(java.sql.Driver.class);
underlayingDriver = mock(java.sql.Driver.class);
DriverManager.registerDriver(underlayingDriver);
and usage:
List<java.sql.Driver> driversInManager = Collections.list(DriverManager.getDrivers());
Problem is occurring in the internal part of JDK since it is trying to load class by classloader:
private static boolean isDriverAllowed(Driver driver, ClassLoader classLoader) {
boolean result = false;
if (driver != null) {
Class<?> aClass = null;
try {
aClass = Class.forName(driver.getClass().getName(), true, classLoader);
} catch (Exception ex) {
result = false;
}
result = ( aClass == driver.getClass() ) ? true : false;
}
return result;
}
Mocked class classloader is not same as the JUnits caller class.
How can I load correct driver from a different classloader?