Как правильно тестировать код, использующий определенные запросы MySQL -для внутреннего использования

Я собираю данные и храню эти данные в базе данных MySQL, используя Java. Кроме того, я использую Maven для сборки проекта, TestNG в качестве тестовой среды и Spring -Jdbc для доступа к базе данных. Я реализовал слой DAO, который инкапсулирует доступ к базе данных. Помимо добавления данных с помощью классов DAO, я хочу выполнить некоторые запросы, которые агрегируют данные и сохраняют результаты в некоторых других таблицах (, таких как материализованные представления ).

Теперь я хотел бы написать несколько тестовых примеров, которые проверяют, работают ли классы DAO должным образом. Поэтому я подумал об использовании базы данных в -памяти, которая будет заполнена некоторыми тестовыми данными. Поскольку я также использую специфические SQL-запросы MySQL -для агрегирования данных, у меня возникли некоторые проблемы :

  1. . Во-первых, я думал просто использовать встроенную -функциональность базы данных, предоставляемую Spring -Jdbc, для создания экземпляра встроенной базы данных. Я решил использовать реализацию H2. Там я столкнулся с проблемой из-за запросов агрегации, которые используют специфичный для MySQL -контент (, например. функции манипулирования временем -наподобие DATE ()). Еще один недостаток этого подхода заключается в том, что мне нужно поддерживать два файла ddl -фактический файл ddl, определяющий таблицы в MySQL (здесь я определяю кодировку и добавляю комментарии к таблицам и столбцам, обе функции специфичны для MySQL -); и тестовый файл ddl, который определяет те же таблицы, но без комментариев и т. д., поскольку H2 не поддерживает комментарии.
  2. Я нашел описание использования MySQL в качестве встроенной базы данных, которую я могу использовать в тестовых примерах (http://literatitech.blogspot.de/2011/04/embedded-mysql-server-for-junit-testing.html)..Это звучало очень многообещающе для меня. К сожалению, это не сработало. :Возникла ошибка MissingResourceExcpetion "Ресурс '5 -0 -21/Linux -amd64/mysqld' не найден". Кажется, что драйвер не может найти демон базы данных на моей локальной машине. Но я не знаю, что мне нужно искать, чтобы найти решение этой проблемы.

Теперь я немного застрял, и мне интересно, должен ли я создавать архитектуру по-другому. У кого-нибудь есть несколько советов, как мне настроить соответствующую систему? У меня есть два других варианта:

  1. Вместо встроенной базы данных я возьму собственный экземпляр MySQL и настрою базу данных, которая используется только для тестовых случаев. Этот вариант звучит медленно. На самом деле, я мог бы захотеть настроить сервер CI позже, и я подумал, что использование встроенной базы данных будет более подходящим, поскольку тест выполняется быстрее.
  2. Я удаляю из SQL-запросов все, что связано с MySQL -, и использую H2 в качестве встроенной базы данных для тестирования. Если этот вариант является правильным выбором, мне нужно будет найти другой способ тестирования SQL-запросов, которые объединяют данные в материализованные представления.
  3. Или есть 3-й вариант, который я не имею в виду?

Буду признателен за любые подсказки.

Спасибо, XComp

9
задан XComp 28 June 2012 в 12:57
поделиться