假设我有这样的特质:
trait FooStackable {
def foo: String
def bar: Double
abstract override def logic(x: Double): Unit = {
if (x < 0) println(foo)
else super.logic(bar + x)
}
}
我想在行为驱动样式中为此特征编写方法logic
的测试:我想根据输入参数检查测试调用的方法和次数。显然,仅仅实例化这个特征的实例是不可能的(即使覆盖未实现的方法),所以模拟也行不通。
编写此类测试方案是否有意义? (方法logic
中的实际逻辑更复杂)如果是,可孤立测试可堆叠特征?
答案 0 :(得分:0)
代码无法按编写方式编译。特别是,这种特性没有“超级”,因为它不是来自任何东西。我做了一些改变来解决它:
trait Stackable {
def logic(x: Double): Unit
}
trait FooStackable extends Stackable {
def foo: String
def bar: Double
abstract override def logic(x: Double): Unit = {
println("In FooStackable.logic()")
if (x < 0) println(foo)
else super.logic(bar + x)
}
}
trait TestStackable extends Stackable {
def logic(x: Double): Unit = {
println("In TestStackable.logic()")
}
}
object FooStackableTest extends TestStackable with FooStackable {
def foo: String = "foo"
def bar: Double = 1.234
override def logic(x: Double): Unit = {
println("In FooStackableTest.logic()")
super.logic(x)
}
}
通过这些更改,FooStackable现在处于TestStackable(在基类中实现logic())和FooStackableTest(实现FooStackable的其他未定义成员并覆盖逻辑())之间的中间位置:
scala> FooStackableTest.logic(4.0)
In FooStackableTest.logic()
In FooStackable.logic()
In TestStackable.logic()
scala> FooStackableTest.logic(-4.0)
In FooStackableTest.logic()
In FooStackable.logic()
foo
scala>