Scala第一次遇到任何真正的线性化问题,我似乎无法解决这个问题。
假设我有一个测试我想要这样做:
class Magical(magicNumber: Int)
class MagicianSpec extends Magical(123) with FlatSpecLike with BeforeAndAfterEach {
var result = false
override protected def beforeEach(): Unit = {
result = true
super.beforeEach()
}
"This" should "do what I want" in {
assert(result)
}
}
现在我想创建一个扩展abstract class
的{{1}},但也混合在Magical
中,这样在我的测试中我可以扩展一个类并拥有一堆其他默认行为混合在一起免费。
这是我先试过的:
BeforeAndAfterEach
这不起作用。它必须包含abstract class RandomMagic(seed: Int) extends Magical(seed) with BeforeAndAfterEach { thisSuite: Suite =>
override protected def runTest(testName: String, args: Args): Status = thisSuite.runTest(testName, args)
var result = false
override protected def beforeEach(): Unit = {
result = true
super.beforeEach()
}
}
class LuckSpec extends RandomMagic(1) with FlatSpecLike with BeforeAndAfterEach {
"This other one" should "do what I want" in {
assert(result)
}
}
和abstract
修饰符,这意味着它必须是override
,这意味着它不能拥有构造函数,因此无法扩展trait
。< / p>
这是我尝试将具有混凝土构件的类型插入线性化时所得到的:
Magical
所以现在它至少编译但是测试失败了。
有人可以解释为什么它没有做我认为应该做的事情吗?也有办法让这个工作吗?