DriverManager с Mockito - PullRequest
       25

DriverManager с Mockito

0 голосов
/ 03 июня 2018

Я пытаюсь перенести библиотеку в java 10, но у меня есть некоторые ошибки, связанные с Mockito и Byte Buddy.Вот фрагмент логики регистрации

java.sql.Driver underlayingDriver = mock(java.sql.Driver.class);
underlayingDriver = mock(java.sql.Driver.class);
DriverManager.registerDriver(underlayingDriver);

и использования:

List<java.sql.Driver> driversInManager = Collections.list(DriverManager.getDrivers());

Проблема возникает во внутренней части JDK, так как он пытается загрузить класс загрузчиком классов:

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;
}

Загрузчик классов с поддельным классом отличается от класса вызывающего JUnits.

Как загрузить правильный драйвер из другого загрузчика классов?

1 Ответ

0 голосов
/ 05 июня 2018

Проблема здесь заключается в чувствительности загрузчика классов диспетчера драйверов.Для классов java. Mockito не может вставлять mock в загрузчик начальной загрузки, но перемещает классы mock в другой загрузчик классов, так как mock должен видеть классы Mockito.

Возможно, вы можете обойти это, создавкласс псевдодрайвера:

interface MyDriver extends java.sql.Driver {}

и создайте макет этого класса.Таким образом, ваш загрузчик классов и драйвер должны быть идентичны.

...