Как я могу выполнить модульное тестирование базы данных MySQL с помощью Play 2.x?

Мне нужно проверить, создает ли мой код правильные операторы базы данных. Я знаю, что могу запустить свое приложение с базой данных в памяти. Это не идеально, но достаточно для этого проекта. Мой SQL содержит специфичные для MySQL вещи.

Когда я запускаю свой тест, он прерывается на эволюции, которая содержит следующее:

CREATE TABLE `Beaches` (
  `id` INT(10) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`)
)
ENGINE=InnoDB;
COLLATE='utf8_general_ci'

Как решить проблемы с синтаксисом MySQL?


person EECOLOR    schedule 28.02.2013    source источник
comment
Есть ли библиотека макетов jdbc, вы имели в виду макет для классов моделей, чтобы можно было использовать модели без реальной базы данных? Затем можно использовать библиотеки moch общего назначения, такие как mockito.   -  person kolen    schedule 01.03.2013
comment
Нет, я имею в виду тот, который будет издеваться над соединением jdbc. Чтобы я мог спросить, какие операторы SQL были выполнены и, возможно, повлияли на результат.   -  person EECOLOR    schedule 01.03.2013


Ответы (1)


Я нашел способ обойти (большинство) конкретных вещей MySQL (вопрос 1.)

running(FakeApplication(additionalConfiguration = 
  inMemoryDatabase(options=Map("MODE" -> "MySQL")))) {

  DB.withConnection { implicit c =>
    SQL("""
        CREATE TABLE `Beaches` (
          `id` INT(10) NOT NULL AUTO_INCREMENT,
          `name` VARCHAR(255) NOT NULL,
          PRIMARY KEY (`id`)
        )
        /*! ENGINE=InnoDB; */
        /*! COLLATE='utf8_general_ci' */
        """
    ).execute()
    ok
  }
}

Обратите внимание, что у H2 есть MODE=MySQL, как описано в разделе Работа с базой данных H2 в памяти. раздел документации Play.

Другая часть представляет собой комментарии в стиле c, как описано в разделе Синтаксис комментариев руководства. Документация по MySQL.

person EECOLOR    schedule 28.02.2013