java.sql.Driver заглушка не распознается java.sql.DriverManger - PullRequest
1 голос
/ 22 июля 2011

Я пытаюсь провести модульное тестирование тонкого слоя доступа к данным, который я написал. Я надеялся, что мне не нужно будет вставлять заглушку DriverManager в класс, который устанавливает соединение, и у меня нет фиктивной инфраструктуры. Я проверил мою реализацию на MockDunver MockRunner , и она очень похожа, но когда я запускаю тест, я получаю SQLException: «Не найден подходящий драйвер для jdbc: mysql: // localhost: 3306». Вот код заглушки:

public class DriverStub implements Driver
{
    @Override
    public boolean acceptsURL(String URL) throws SQLException
    {
        return true;
    }
    @Override
    public Connection connect(String url, Properties info) throws SQLException
    {
        return new ConnectionStub();
    }
    @Override
    public int getMajorVersion()
    {
        return 1;
    }
    @Override
    public int getMinorVersion()
    {
        return 0;
    }
    @Override
    public DriverPropertyInfo[] getPropertyInfo(String url, Properties info)
    throws SQLException
    {
        return new DriverPropertyInfo[0];
    }
    @Override
    public boolean jdbcCompliant()
    {
        return true;
    }
}

Фрагмент телефонного кода:

Connection connection = null;
try
{
    Class.forName(driver).newInstance();
}
...
try
{
    connection = Drivermanager.getConnection(...);
}
...

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

Реализация Driver должна зарегистрировать экземпляр от Driver до DriverManager.registerDriver в его статическом инициализаторе.

public class DriverStub implements Driver {
    static {
        java.sql.DriverManager.registerDriver(new DriverStub());
    }
    ...
}

Это полный и полный взлом, но вот, пожалуйста. Лично я бы предложил игнорировать DriverManager и ссылаться прямо на драйвер.

0 голосов
/ 22 июля 2011

Это, кажется, гораздо больше усилий, чем оно того стоит. Почему вы хотите заглушить DriverManager? Что это тест? Как вы можете доказать ценность вашего уровня доступа к данным, не используя настоящий менеджер драйверов? Не хотите подключиться к базе данных для тестирования?

Я бы загрузил драйвер JDBC и покончил с этим. Это похоже на насмешку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...