dav*_*ell 2 scala traits self-type scalatest
我想覆盖ScalaTest特性BeforeAndAfterEach,以便为我的所有测试实现一次.最后我得到它编译,但我不明白为什么.
trait MySetup extends BeforeAndAfterEach {
this : org.scalatest.BeforeAndAfterEach with org.scalatest.Suite =>
var service: String = _
abstract override def beforeEach(): Unit = {
service = "apa"
super.beforeEach()
}
abstract override def afterEach(): Unit = {
service = ""
}
}
Run Code Online (Sandbox Code Playgroud)
让它运作的是线:
this : org.scalatest.BeforeAndAfterEach with org.scalatest.Suite =>
Run Code Online (Sandbox Code Playgroud)
我在BeforeAndAfterEach实现的开头找到它并复制它.
它做了什么,为什么需要它?
更新:
这是一个更简单的版本.
trait MySetup extends FlatSpec with BeforeAndAfterEach {
var service: String = _
override def beforeEach {
service = "apa"
super.beforeEach
}
override def afterEach {
service = ""
super.afterEach
}
}
Run Code Online (Sandbox Code Playgroud)
BeforeAndAfterEach具有自我类型的Suite,这意味着BeforeAndAfterEach只能混合到扩展Suite的类型中.ScalaTest希望您首先选择主套件类型,然后再选择混合行为.
自我类型声明不会在子特征中继承,因此您必须重新声明自我类型.
以下问题在自我类型和子特征之间存在一些权衡:自我类型和特质子类之间有什么区别?
有关ScalaTest设计的一些背景信息,请参阅:http://www.artima.com/scalazine/articles/selfless_trait_pattern.html
| 归档时间: |
|
| 查看次数: |
1155 次 |
| 最近记录: |