2017-02-27 29 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