2012-01-06 3 views
0

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

@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», он создает отдельный экземпляр HSQLDB для всех моих тестов (что означает, что мой пример выше будет успешным). Когда я запускаю вышеуказанный тест как «mvn test -Dtest = UserAgentTest», он будет терпеть неудачу (он, кажется, создает несколько экземпляров HSQLDB).

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

Мой вопрос, как я могу получить свою тестовую установку для создания одного (и только одного) экземпляра HSQLDB для каждого набора тестов.

+0

Пожалуйста, отредактируйте ваш текст и дайте ему понять, в чем ваши вопросы. – fredt

ответ

0

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

DROP SCHEMA PUBLIC CASCADE 

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

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

+0

Ну, тогда у меня не было бы базы данных для тестирования, поскольку схема была создана на начальном подключении. (используя <свойство name = "hibernate.hbm2ddl.auto" value = "create-drop" />) –

+0

Я обновлю ответ с дополнительными опциями. – fredt

Смежные вопросы