2011-12-13 45 views
9

我有一個使用org.scalatest進行測試的scala應用程序。這些測試需要一些全局設置(和拆卸),以便管理測試數據庫。org.scalatest:全局設置(像beforeAllSuites?)

請不要告訴我我的測試不應該打到數據庫,我應該這樣做Java-DAO-Stub-WTF-Overkill-Way™:-)。

我正在使用SBT,它提供了一種試驗前後執行代碼測試:

testOptions in Test += Tests.Setup(() => println("Setup")) 

    testOptions in Test += Tests.Cleanup(() => println("Cleanup")) 

可惜我不能在問題進入班那裏。毫不奇怪,將它們導入build.sbt也不起作用。

任何想法?

+0

我有一個非常相似的目標,並找到了一個解決方案。檢查這個問題:http://stackoverflow.com/questions/27272811/how-to-cut-a-long-scalatest-spec-to-pieces/27275814想要保持初始化步驟作爲測試類。 – akauppi

回答

4

根據您的需要,您可以使用BeforeAndAfterAllBeforeAndAfter特徵。

BeforeAndAfterAll:

特質,可以混合到需要 前和執行該套件後調用的方法套房。該特徵允許代碼在套件的所有測試和嵌套套件運行之前和/或之後執行 。

所以在這個例子中,你需要定義一個包含所有其他套件/測試的MasterSuite,它擴展了這個特性。

BeforeAndAfter:

性狀可以混合成需要的代碼運行的每個測試之前和之後執行 套件。這個特性促進了 中的測試樣式,其中實例變量中保存的可變夾具對象被替換爲 或在每個測試或套件之前重新初始化。

+3

定義一個MasterSuite意味着我的所有測試都需要在一個文件中定義,對吧? 現在,我已將所有依賴於數據庫的測試分爲一個套件並在那裏使用BeforeAndAfterAll。這也有我可以輕鬆跳過這些慢速測試的優勢。 –

+3

多年後,但仍然與任何人發現問題相關:您不需要在單個文件中定義所有測試,ScalaTest具有組合功能,您可以使用'class MasterSuite extends Suites(new OneSpec,new TwoSpec)',所以組合套件只需要放在類路徑中('BeforeAndAfterAll' Scaladoc就是一個例子,所以很容易調用)。由於2.0 ScalaTest具有'@ DoNotDiscover'註釋,因此您可以停止運行所有組合套件的SBT(或任何支持的運行程序),而只能運行主設備。 – ches

+0

其實作者在這裏涵蓋了它:http://stackoverflow.com/questions/15423337/doing-something-before-or-after-all-scalatest-tests – ches