HSQLDB в модульных тестах (Scalatest / JUnitRunner) - PullRequest
0 голосов
/ 06 января 2012

У меня есть несколько тестов как часть WordSpec.Из моего чтения Scalatest Docs, это должно создать набор тестов.HSQLDB перезапускается для каждого из тестовых случаев в этом файле.

@RunWith(classOf[JUnitRunner])
class UserAgentTest extends WordSpec with BeforeAndAfterAll {

  val userService: UserService = new UserServiceJpaImpl
  var userAgent: ActorRef = _
  var user: MutableUser = _

  override def beforeAll(configMap: Map[String, Any]) {
    TestUtil.deleteAllTestUsers()
    user = TestUtil.createTestUser("joe")
    user.cash = 500
    user.exp = 10000
    user.level = 10
    userService.save(user)

    userAgent = actorOf(new UserAgent(user.id)).start()
  }

  override def afterAll(configMap: Map[String, Any]) {
      if (userAgent != null)
        userAgent.stop()
  }

  "UserAgent" must {
    "test 1..." in { ... }
    "test 2..." in { ... }
  }

}

В результате данные теста, загруженные в beforeAll, отсутствуют для теста 2. Я могу выполнить эту работу, инициализируя базу данных для каждого теста (используя «до»).вместо "beforeAll").Это не проблема для такого маленького теста, но может быть проблемой позже.Я запускаю это с Maven (у него возникают проблемы при запуске изнутри моей IDE)

Я также заметил, что когда я запускаю "mvn test", создается впечатление, что создается один экземпляр HSQLDB для всего моего теста (Это означает, что мой приведенный выше пример будет успешным).Когда я запускаю приведенный выше тест как «mvn test -Dtest = UserAgentTest», он не выполняется (создается впечатление, что создается несколько экземпляров HSQLDB).

К сожалению, выполнение с «mvn test» вызовет некоторые другие мои тестыпотерпеть неудачу, так как один экземпляр HSQLDB используется для всех моих наборов тестов.

Мой вопрос: как мне настроить мой тест для создания одного (и только одного) экземпляра HSQLDB для каждого набора тестов?

1 Ответ

0 голосов
/ 07 января 2012

С одним экземпляром HSQLDB для всех тестов, если некоторые наборы тестов должны начинаться с пустой базы данных, вы можете выполнить этот оператор, чтобы очистить старые данные в начале или конце каждого набора, в зависимости от настроек:

DROP SCHEMA PUBLIC CASCADE

Это также может быть использовано для любой схемы, созданной вашими тестами.

Другие опции включают подключение к серверу, содержащему базу данных памяти, которая позволяет базе данных выдерживать многократное выполнение в разных процессах.

...