2012-01-06 89 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我可以通過初始化DB每個測試「前」,而不是「beforeAll使這一工作(使用「)。這對於這樣的小測試來說不是問題,但稍後可能會出現問題。我用Maven運行它(它在從我的IDE中運行時有問題)

我也注意到,當我運行「mvn test」時,它似乎爲我的所有測試(意思是創建一個HSQLDB實例,我的上面的例子會成功)。當我將上述測試運行爲「mvn test -Dtest = UserAgentTest」時,它會失敗(它似乎創建了多個HSQLDB實例)。

不幸的是,運行「mvn test」會導致我的一些其他測試失敗,因爲單個HSQLDB實例用於我的所有測試套件。

我的問題是,如何讓我的測試設置爲每個測試套件創建一個(且只有一個)HSQLDB實例。

+0

請編輯您的文本,並確切地說明您的問題。 – fredt 2012-01-06 20:38:26

回答

0

對於所有測試,如果一些測試套件需要以空數據庫開始,那麼您可以在每個套件的開頭或結尾清理舊數據,具體取決於設置:

DROP SCHEMA PUBLIC CASCADE 

這也可以用於您的測試創建的任何模式。

其他選項包括連接到包含內存數據庫的服務器,該服務器允許數據庫在不同進程中執行多次執行。

+0

那麼,我將沒有數據庫來測試,因爲架構是在初始連接上創建的。 (使用) – 2012-01-08 03:56:10

+0

我會用更多選項更新答案。 – fredt 2012-01-08 11:16:24