2017-02-27 45 views
0
運行BeforeAll並畢竟多套房

我測試的情況是,我有以下層次:如何Scalatest

AfterAll 
    AfterAll 
    Test Suite for Component 1 with multiple test cases 
    BeforeAll 
    AfterAll 
    Test Suite for Component 2 with multiple test cases 
    BeforeAll 
    AfterAll 
    Test Suite for Component 2 with multiple test cases 
    BeforeAll 
BeforeAll 

現在我有,我之前和一個套房後運行我的設置部分的理念,每個測試用例,但是有,我可以前後運行我的設置方式的所有測試套件

+0

你是說你想爲組件1和組件2分別設置'beforeAll'和'afterAll'? – prayagupd

+0

不,我希望在所有這些組件之前完成和afterAll,並且我將分開beforeAll和afterAll,我也有了如何放置後者的想法。 –

+0

好的,所以你需要普通的'beforeAll'和'afterAll'來同時用它們各自的'beforeAll'和'afterAll'。我猜你會在2個不同的測試文件中編寫2個組件,對嗎? – prayagupd

回答

1

您可以利用繼承複製在各種套件的安裝,這是稍微手冊,但它是一個非常常見的方法。

trait DefaultSuite extends Suite with BeforeAndAfterAll with Informing { 
    override def beforeAll(): Unit = {..} 
    override def afterAll(): Unit = {..} 
} 


class Component1Tests extends FlatSpec with DefaultSuite {} 
class Component2Tests extends FlatSpec with DefaultSuite {} 
class Component3Tests extends FlatSpec with DefaultSuite {} 

如果你想要的東西只能運行一次,在每次之前和之後,你需要變得更聰明。在某些情況下,SBT插件或任務來處理最先進的情景中,別人對你做這樣的事情:

object Singleton { 
    val dbConnection = DB(..) 
} 

trait DefaultSuite extends Suite with BeforeAndAfterAll with Informing { 
    def dbConnection: DB = Singleton.dbConnection 
} 

所以的實現者的DefaultSuite將能夠輕鬆地訪問了一堆東西,但背後場景中只有一個特定對象的單個實例。過去我曾經很成功地使用過這種技術,其中單例和特徵用於提供「假」繼承,但實際上您引用的是各種對象的相同實例。

+0

不知道如果我完全得到你,在第一部分,你建議和常見的beforeAll和AfterAll。在第二部分中,您向我展示了我只想爲整個套件執行一次任務,我應該使用Scala中的對象。是這樣嗎? –

+0

@SaquibGul不,我告訴你如何做一次'sbt:test' .. – flavian