Как издеваться над DriverManager.getConnection (…)?

У меня есть класс, который подключается к базе данных H2 и выполняет несколько операторов SQL.

public class H2Persistence implements IPersistence {

    private Connection conn;

    @Override
    public void open() {
        try
        {
            Class.forName("org.h2.Driver");
            conn = DriverManager.getConnection(CONN_TYPE_USER_HOME);

            final Statement stmt = conn.createStatement();

            stmt.executeUpdate("CREATE TABLE PERSON(" +
                    "ID BIGINT,"+
                    "AGEGROUP VARCHAR(255),"+
                    "MONTHLY_INCOME_LEVEL VARCHAR(255)," +
                    "GENDER VARCHAR(1),"+
                    "HOUSEHOLD_ID BIGINT)");

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
...
}

Я хочу написать модульный тест, который проверяет, что вopen метод определенного оператора SQL (DROP TABLE IF EXISTS PERSON) выполнен.

Для этого я написал следующий тест:

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;


@RunWith(PowerMockRunner.class)
@PrepareForTest(DriverManager.class)
public class H2PersistenceTest {
    @Test
    public void testDropPersonIsCalled() throws SQLException {
        final Statement statement = mock(Statement.class);

        final Connection connection = mock(Connection.class);

        when(connection.createStatement()).thenReturn(statement);

        mockStatic(DriverManager.class);

        when(DriverManager.getConnection(H2Persistence.CONN_TYPE_USER_HOME)).thenReturn
                (connection);


        final H2Persistence objectUnderTest = new H2Persistence();

        objectUnderTest.open();
        verify(statement.executeUpdate("DROP TABLE IF EXISTS PERSON"));
    }
}

Но это нет работа - вместо фиктивного соединения,DriverManager возвращает реальное соединение.

Как я могу это исправить (сделатьDriverManager обратное соединение макет в тесте)?

Вот'сpom.xml моего проекта, может быть, там что-то не так.




    4.0.0

    ru.mycompany
    myproduct
    1.0-SNAPSHOT
    
        UTF-8
        1.5.1
        1.6
        1.6
    

    
        
            junit
            junit
            4.10
            test
        
        
            org.easytesting
            fest-util
            1.2.3
        
        
            org.easytesting
            fest-assert-core
            2.0M8
        
        
            com.google.guava
            guava
            15.0
        
        
            org.mockito
            mockito-all
            1.9.5
        
        
            com.h2database
            h2
            1.3.173
        
        
            org.powermock
            powermock-module-junit4
            ${powermock.version}
            test
        
        
            org.powermock
            powermock-api-mockito
            ${powermock.version}
            test
        
    


Ответы на вопрос(2)

Ваш ответ на вопрос