Я програмую на Java, і мої додатки багато використовують БД. Отже, для мене важливо мати можливість легко перевірити використання БД.
Що це за тести БД? Для мене вони повинні забезпечити дві прості вимоги:
- Перевірте синтаксис SQL.
- Що ще важливіше, переконайтесь, що дані обрані / оновлені / вставлені правильно, відповідно до певної ситуації.
Ну, здається, що мені потрібна лише БД.
Але насправді я віддаю перевагу ні, оскільки є небагато труднощів із використанням БД для тесту:
- "Просто придбайте собі тестову БД, наскільки це може бути важко?" - Ну, на моєму робочому місці мати персональне тестування БД досить неможливо. Ви повинні використовувати "загальнодоступну" БД, доступну для всіх.
- "Ці тести не є швидкими ..." - Тести DB, як правило, повільніші, ніж звичайні тести. Насправді не ідеально мати повільні тести.
- "Ця програма повинна розглядати будь-які випадки!" - Це стає дещо надокучливим і навіть неможливим намагатися змоделювати кожен випадок у БД. Для кожного випадку слід робити певну кількість запитів на вставку / оновлення, що дратує і вимагає часу.
- "Зачекайте секунду, звідки ви знаєте, що в цій таблиці є 542 рядки?" - Одним з основних принципів тестування є можливість перевірити функціональність, відмінну від функції тестованого коду. Застосовуючи БД, зазвичай є один спосіб зробити щось, тому тест точно такий же, як і основний код.
Отже, ви можете зрозуміти, що мені не подобаються БД, коли справа доходить до тестів (звичайно, мені доведеться дістатися до цього в якийсь момент, але я волів би дістатись пізніше під час тестування, після того, як я знайшов більшість помилок за допомогою решта методів випробувань). Але що я шукаю?
Я шукаю спосіб імітувати БД, фальшиву БД, використовуючи файлову систему або просто віртуальну пам’ять. Я думав, що, можливо, існує інструмент / пакет Java, який дозволяє просто побудувати (за допомогою інтерфейсу коду) макет БД на тест, із змодельованими таблицями та рядками, з перевіркою SQL та з інтерфейсом коду для моніторингу його стану (а не за допомогою SQL ).
Ви знайомі з цим видом інструменту?
Редагувати: Дякую за відповіді! Хоча я просив інструмент, ви також надали мені декілька порад щодо проблеми :) Щоб перевірити ваші пропозиції, мені знадобиться деякий час, тож зараз я не можу сказати, чи ваші відповіді не задовольняли.
У будь-якому випадку, ось кращий погляд на те, що я шукаю - уявіть клас з іменем 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;
}
Сподіваюсь, цей код достатньо зрозумілий, щоб зрозуміти мою ідею (вибачте за синтаксичні помилки, я вводив вручну без мого дорогого Eclipse: P).
До речі, я частково використовую ORM, і мої необроблені запити SQL досить прості і не повинні відрізнятися від однієї платформи до іншої.