如何使用扩展BeforeAfterAll的特征来堆叠行为

时间:2018-06-13 22:17:54

标签: specs2

我正处于一种状态,我有2个特征在扩展,之后为集成测试做了不同的操作:一个管理数据库,另一个管理文件系统。例如:




  trait DBSpecification扩展BeforeAfterAll {

覆盖def beforeAll()= {
 println(“DB  - > BeforeAll”)
 }

覆盖def afterAll()= {
 println(“DB  - > AfterAll”)
 }
}

 trait FileSystemSpecification扩展BeforeAfterAll {

覆盖def beforeAll()= {
 println(“FileSystem  - > BeforeAll”)
 }

覆盖def afterAll()= {
 println(“FileSystem  - > AfterAll”)
 }
}

类MyTest使用FileSystemSpecification扩展带有DBSpecification的规范{

 {
中的“一些测试” 1 ==== 1
 }

}
  




如果我这样做,只会执行最后一个特征的打印,这种情况下FileSystemSpecification。如果我尝试从特征中调用 super ,我会开始遇到一些编译问题。我已经尝试了很多方法,但无法弄清楚解决方案。





ScalaTest在其文档,但无法找到Specs2的方法。





有什么想法吗?




1 个答案:

答案 0 :(得分:0)

是的特质不是编写行为的最佳选择。这是一种锅炉式的方法:

import org.specs2.mutable._
import org.specs2.specification._

trait DBSpecification extends BeforeAfterAll {

  def beforeAll() = {
    println("DB -> BeforeAll")
  }

  def afterAll() = {
    println("DB -> AfterAll")
  }
}

trait FileSystemSpecification extends BeforeAfterAll {

  def beforeAll() = {
    println("FileSystem -> BeforeAll")
  }

  def afterAll() = {
    println("FileSystem -> AfterAll")
  }
}

trait FileSystemDBSpecification extends DBSpecification with FileSystemSpecification {
  override def beforeAll() = {
    super[DBSpecification].beforeAll()
    super[FileSystemSpecification].beforeAll()
  }

  override def afterAll() = {
    super[DBSpecification].afterAll()
    super[FileSystemSpecification].afterAll()
  }
}

class MyTestSpec extends Specification with FileSystemDBSpecification {

  "some test" in {
    1 ==== 1
  }

}