Тестирование соединения с базой данных с DriverManager (Java) - PullRequest
0 голосов
/ 21 апреля 2011

Я сейчас пытаюсь протестировать (модульное тестирование) класс, который подключается к базе данных, см. Код:

public Connection getConnection() {
     System.out.println("Conectando ao banco");
     try {
         return DriverManager.getConnection("jdbc:postgres://localhost/banco", "root", "");
     } catch(SQLException e) {
         throw new RuntimeException(e);
     }
}

Мне понравилось, я знаю, как я могу это сделать (Jmock), но DriverManager не является интерфейсом, поэтому я не могу издеваться над этим классом.

Ответы [ 3 ]

1 голос
/ 21 апреля 2011

Не вижу смысла насмехаться над этим.Если ваша цель - проверить, можете ли вы подключиться к базе данных, что вы доказываете с помощью макета?Абсолютно ничего, IMO.

Протестируйте свои классы персистентности, установив соединение, выполнив операции и откатив изменения.

После того, как это сработает, при тестировании сервисов совершенно уместно высмеивать классы персистентности.потому что вы уже тестировали персистентность.

Но то, что вы предлагаете, заходит слишком далеко, ИМО.Просто запустите тест и продолжайте.

0 голосов
/ 12 января 2012

Я знаю, что это старый вопрос, но сталкивался с ним при решении связанной проблемы.

Две стратегии, которые могут работать на вас:

1) Смоделируйте getConnection() на вашем объекте, чтобы вы напрямую возвращали фиктивное соединение. Есть несколько различных способов сделать это в зависимости от вашего конкретного случая использования, но в принципе это относительно просто.

2) Изменение вашей среды для насмешек и использование PowerMock , которое позволяет моделировать статические методы на объектах. Он не будет работать только с DriverManager, но вы можете создать оболочку для этого вызова в другом классе, с которым он будет работать.

0 голосов
/ 21 апреля 2011

Так что вы можете переосмыслить свой дизайн.DAO может быть абстрактным слоем между постоянством и бизнес-логикой.Это может помочь вам в модульном тестировании.

...