Я программирую на Java, и мои приложения много используют DB. Следовательно, для меня важно легко проверить использование БД.
Какие тесты DB все? Для меня они должны предоставить два простых требования:Как имитировать БД для тестирования (Java)?
- Проверка синтаксиса SQL.
- Что еще более важно, убедитесь, что данные выбраны/обновлены/вставлены правильно в соответствии с данной ситуацией.
Хорошо, тогда мне кажется, что мне нужна только БД.
Но на самом деле, я предпочитаю не так, как есть несколько трудностей с использованием БД для теста: «? Просто получить себе тестирование БД, как трудно это может быть»
- - Ну, на моем рабочем месте, чтобы иметь личную тестовую БД, это довольно невозможно. Вы должны использовать «общедоступную» БД, доступную для всех.
- «Эти тесты уверены, что это не быстро ...» - тесты БД имеют тенденцию быть медленнее, чем обычные тесты. Это действительно не идеальный вариант для проведения медленных тестов.
- «Эта программа должна обрабатывать любой случай!» - Это становится несколько раздражающим и даже невозможным попытаться имитировать каждый случай в БД. Для каждого случая должно быть сделано определенное количество запросов на вставку/обновление, что раздражает и требует времени.
- «Подождите, как вы знаете, что в этой таблице есть 542 строки?» - Один из основных принципов тестирования - это возможность тестировать функциональность не так, как у тестируемого кода. При использовании БД обычно есть один способ сделать что-то, поэтому тест точно такой же, как и основной код.
Итак, вы можете понять, что мне не нравятся БД, когда дело доходит до тестов (конечно, мне нужно будет дойти до этого в какой-то момент, но я предпочел бы получить его позже после моего тестирования после Я нашел большинство ошибок, используя остальные методы тестирования). Но что я ищу?
Я ищу способ моделирования БД, макетной БД, используя файловую систему или просто виртуальную память. Я подумал, что, возможно, есть инструмент/пакет Java, который позволяет просто построить (используя интерфейс кода) DB mock для каждого теста, с имитируемыми таблицами и строками, с проверкой SQL и с интерфейсом кода для контроля его состояния (а не с использованием SQL).
Вы знакомы с этим типом инструмент?
Edit: Спасибо за ответы! Хотя я просил инструмент, вы также предоставили мне несколько советов, касающихся проблемы. Мне потребуется некоторое время, чтобы проверить ваши предложения, поэтому я не могу сказать прямо сейчас, не удовлетворяют ли ваши ответы.
В любом случае, вот лучшее представление о том, что я ищу - Представьте себе класс с именем DBMonitor, что одна из его функций - найти количество строк в таблице. Вот воображаемый код, как я хотел бы проверить эту функцию с помощью JUnit:
public class TestDBMonitor extends TestCase {
@Override
public void setUp() throws Exception {
MockConnection connection = new MockConnection();
this.tableName = "table1";
MockTable table = new MockTable(tableName);
String columnName = "column1";
ColumnType columnType = ColumnType.NUMBER;
int columnSize = 50;
MockColumn column = new MockColumn(columnName, columnType, columnSize);
table.addColumn(column);
for (int i = 0; i < 20; i++) {
HashMap<MockColumn, Object> fields = new HashMap<MockColumn, Object>();
fields.put(column, i);
table.addRow(fields);
}
this.connection = connection;
}
@Test
public void testGatherStatistics() throws Exception {
DBMonitor monitor = new DBMonitor(connection);
monitor.gatherStatistics();
assertEquals(((MockConnection) connection).getNumberOfRows(tableName),
monitor.getNumberOfRows(tableName));
}
String tableName;
Connection connection;
}
Я надеюсь, что этот код достаточно ясно, чтобы понять мою мысль (извините за ошибки синтаксиса, я печатал вручную, без моего дорогого Затмении :П).
Кстати, я частично использую ORM, а мои необработанные SQL-запросы довольно просты и не должны отличаться от одной платформы к другой.
Я должен передать его вам, я не думал, что кто-то пересматривает этот вопрос и беспокоится о том, чтобы написать обновленный ответ. Я спросил его 8 лет назад, и с тех пор я получил опыт, который заставляет меня в основном согласиться с вашим ответом - особенно с частью «тестирования функциональности с тем же кодом». –