2014-01-15 35 views
4

TLDR;在一個ScalaTest規範中混合了BeforeAndAfterAllParallelTestExecution,afterAll()在每次測試之後被調用,然後在所有的測試之後再次調用。我只想要畢竟的行爲。ScalaTest afterAll()在每次測試後調用

我有一個ScalaTest規格如下:

class TestSpec extends fixture.FunSpec with ShouldMatchers with BeforeAndAfter with BeforeAndAfterAll with ParallelTestExecution { 
    override def afterAll() = { 
     println("afterAll") 
    } 

    describe("something") { 
     it("should foo") { 
     println("foo") 
     } 

     it("should bar") { 
     println("bar") 
     } 
    } 
} 

兩個測試要共享一個夾具,然後afterAll()應清理夾具。我已經省略了夾具代碼的細節,因爲這個問題並不重要。

這裏是我的測試的輸出:

foo 
afterAll 
bar 
afterAll 
afterAll 

所以afterAll()被每次測試後畢竟他們的調用,然後再次。我只希望它在所有測試後被調用。

有誰知道爲什麼afterAll()的行爲如此?

更新

如果我不ParallelTestExecution混,我的測試表現正常:

foo 
bar 
afterAll 

不幸的是,其實我是想ParallelTestExecution。有沒有辦法讓我的蛋糕也吃嗎?

回答

3

這是一種正常行爲,因爲爲了降低併發衝突和錯誤的風險,ParallelTestExecution在其自己的Test類實例中運行每個測試。每個測試都將作爲TestSpec的單獨實例運行,這會導致每個實例都執行beforeAllafterAll

但是,您可以使用嵌套套件解決此問題(爲了獲得一個執行beforeAll和一個afterAll),請參閱此question瞭解更多詳細信息。

相關問題