Как мне выполнить модульные тесты для классов Java, которые взаимодействуют с базой данных, используя фиктивное соединение? - PullRequest
0 голосов
/ 22 апреля 2020

Вот немного предыстории, чтобы дать вам некоторый контекст для моего вопроса.

Я работаю над проектом с местной компанией через мой колледж, и программа, которую я создаю, должна взаимодействовать с базой данных. и выполнить основные c операции CRUD. Компания настаивает на том, чтобы мой код был модульным, и я проверяю соединение с базой данных при выполнении модульных тестов. Я пытался протестировать свой код в отдельной базе данных, но мне сказали, что это тест на реализацию, а не модульный тест.

Я написал класс java, который содержит методы, которые просто вызывают и выполняют другие * Методы 1005 *, такие как createStatement() и executeUpdate(...), так что вместо написания четырех или пяти строк кода для взаимодействия с базой данных я могу просто вызвать другой фрагмент кода, чтобы немного автоматизировать его для меня. Вот пример одного из методов в моем классе:

public boolean insertIntoTable(Connection connection, IQueryBuilder queryBuilder, String tableName, String[] dbFields, String[] dbFieldsValues) {
        String query = queryBuilder.insertIntoStatement(tableName, dbFields, dbFieldsValues);
        try {
            Statement st = connection.createStatement();
            st.executeUpdate(query);
            st.close();
            connection.close();
            return true;
        } catch (SQLException exception) {
            return false;
        }
    }

Вышеуказанный метод insertIntoTable основан только на двух других частях кода: Connection и IQueryBuilder. Он возвращает true, если все строки в try выполняются без сбоев, и false в противном случае.

Connection - это интерфейс из пакета java.sql, поэтому мы знаем, что его вызовы методов и реализации должны работать правильно .

IQueryBuilder - это еще один мой интерфейс, который возвращает отформатированные SQL строки, предназначенные для использования методом executeUpdate интерфейса Statement. Реализация IQueryBuilder, которую я буду использовать для этого метода, прошла модульное тестирование и была одобрена компанией, поэтому я предполагаю, что пройденная реализация на этом этапе также работает нормально.

Таким образом, мы добрались до моего вопроса. Как мне выполнить модульное тестирование чего-то вроде insertIntoTable, которое не обязательно должно иметь какие-либо бизнес-логики c и должно использовать фиктивное соединение?

Кроме того, что именно я здесь тестирую? Что метод возвращает истину или ложь? Я издеваюсь над подключением к базе данных все, что хочу, без проблем. Тем не менее, я чувствую, что, если я высмеиваю соединение с базой данных, я на самом деле ничего не тестирую, поскольку нет никакого способа узнать, действительно ли мой код работал или нет.

...