Ошибка при подключении к пользовательскому драйверу БД при запуске через класс PowerMockRunner

#java #powermockito

#java #powermockito

Вопрос:

Я получаю следующую ошибку для своего класса junit при попытке подключиться к базе данных, я использую PowerMockRunner для своего junit. И драйвер, через который я пытаюсь подключиться, не является хорошо известным или открытым исходным кодом, это пользовательский драйвер, созданный моей компанией. Это тот, который вызывает проблему? трассировки:

  WARNING: Error while registering Oracle JDBC Diagnosability MBean.
java.lang.LinkageError: loading constraint violation: loader "org/powermock/core/classloader/javassist/JavassistMockClassLoader@591550a" previously initiated loading for a different type with name "javax/management/MBeanServer" defined by loader "com/ibm/oti/vm/BootstrapClassLoader@7ecd7c73"
    at java.lang.ClassLoader.defineClassImpl(Native Method)
    at java.lang.ClassLoader.defineClassInternal(ClassLoader.java:397)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:358)
    at org.powermock.core.classloader.javassist.JavassistMockClassLoader.loadUnmockedClass(JavassistMockClassLoader.java:90)
    at org.powermock.core.classloader.MockClassLoader.loadClassByThisClassLoader(MockClassLoader.java:104)
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass1(DeferSupportingClassLoader.java:147)
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:98)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:880)
    at oracle.jdbc.driver.OracleDriver.registerMBeans(OracleDriver.java:409)
    at oracle.jdbc.driver.OracleDriver$1.run(OracleDriver.java:241)
    at java.security.AccessController.doPrivileged(AccessController.java:678)
    at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:237)
    at java.lang.Class.forNameImpl(Native Method)
 

Ответ №1:

Есть ли у вас @PrepareForTest аннотации в вашем тесте?

Если да, то при подключении он ссылается на класс-заглушку и выдает ожидание.

Добавить @PowerMockIgnore аннотацию для игнорирования

 @RunWith (PowerMockRunner.class)
...
@PowerMockIgnore({"java.sql.*", "javax.management.*", "org.apache.http.conn.ssl.*", "com.amazonaws.*", "javax.net.ssl.*","com.sun.*"})
public class ... {}
 

Ответ №2:

Попробуйте добавить следующую аннотацию вместе с другой вашей аннотацией над объявлением класса

 @PowerMockIgnore({"javax.management.*"})