@SankaSanka

Как написать JUnit тест к методу который лазит в БД?

Есть простой метод добавляющий акк в базу:

@Override
    public boolean addAccount(String currUserEmail, String account, String info) throws SQLException {
        boolean res = false;
        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection con = null;
        try {
            con = ConnectionPool.getInstance().getConnection();
            ps = (PreparedStatement) con.prepareStatement(SQL_ADD_CARD);
            ps.setString(1, currUserEmail);
            ps.setString(2, account);
            ps.setString(3, info);
            ps.executeUpdate();
 
            res = true;
 
        } finally {
            ConnectionPool.close(rs);
            ConnectionPool.close(ps);
            ConnectionPool.close(con);
        }
        return res;
 
    }


Пытаюсь к нему написать тест:

private FactoryDAO factoryDAO = FactoryDAO.getInstance();  
 
@Test
    public void testaddAccount() throws SQLException {
        String currUserEmail = "mail";
        String account = "account";
        String info = "info";
        
        assertEquals(true, factoryDAO.getAccountDao().addAccount(currUserEmail, account, info));
    }

Но он естественно не работает, ибо доступ в БД через пулл, который работает только когда запущен томкат.
Как правильно сделать, чтобы он отработал с базой данных?

Правильно ли то, что я пытаюсь сделать в принципе? (Это у меня вроде курсового, должно быть все по-человечески).
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
Приходят в голову такие варианты:
  • Если нужен только юнит-тест, то используя PowerMock, замокать методы ConnectionPool. Пример: https://stackoverflow.com/a/18910765
  • Можно написать интеграционный тест, реализовав тестовый ConnectionPool и запустив реальную базу данных в докере, используя Java Testcontainers https://www.testcontainers.org/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы