У меня есть единичный тест, который пытается создать SQLException
для имитации ошибки базы данных. В конструкторе SQLException
есть вызов DriverManager
, который имеет статический блок инициализации. Я полагал, что я мог подавить статический блок с этим типом установки:Не удается подавить статический блок инициализатора DriverManager
@RunWith(PowerMockRunner.class)
@SuppressStaticInitializationFor({"java.sql.DriverManager"})
public class StaticTest
{
@Test
public void testStaticSuppress() throws Exception
{
SQLException ex = new SQLException();
expect(...).andThrow(ex);
}
}
При запуске теста, статический блок в DriverManager
еще называется. Что я делаю не так?
Разъяснение
- Я бег Powermock 1.5 - Я был под впечатлением, что использование v1.5 позволяет мне фиктивные системные классам
- Когда
DriverManager
работает это статический блок инициализации, я получить это исключение:
Oct 15, 2013 1:06:24 PM oracle.jdbc.driver.OracleDriver registerMBeans
WARNING: Error while registering Oracle JDBC Diagnosability MBean.
java.lang.LinkageError: loader constraint violation: when resolving method "java.lang.management.ManagementFactory.getPlatformMBeanServer()Ljavax/management/MBeanServer;" the class loader (instance of org/powermock/core/classloader/MockClassLoader) of the current class, oracle/jdbc/driver/OracleDriver, and the class loader (instance of) for resolved class, java/lang/management/ManagementFactory, have different Class objects for the type javax/management/MBeanServer; used in the signature
- Я понимаю, что могу сделать издевательство
SQLException
и никогда не копировать его напрямую. Я бы предпочел не идти по этому маршруту, поскольку это означало бы обновление 91 различных модульных тестов. Я задал вопрос, потому что это выглядело так, как будто мой код должен работать отлично в соответствии с документами PowerMock.
ли это отношение для ваших тестов, чтобы подавить инициализацию 'DriverManager'? –
Для моих тестов важно смоделировать ошибки базы данных. Самый простой способ сделать это - создать 'SQLException', но у него есть куча побочных эффектов из-за' DriverManager' – RustyTheBoyRobot
Статический инициализатор 'DriverManager' регистрирует драйверы в пути к классам. Мне любопытно, как это может вызвать побочные эффекты в ваших тестах, если только вы не тестируете реализацию драйвера JDBC. –