Я хотел бы проверить метод, который вызывает в нем error()
.
IntEmptyStack.top
это то, что я хочу протестировать с помощью spec2:
abstract class IntStack {
def push(x: Int): IntStack = new IntNonEmptyStack(x, this)
def isEmpty: Boolean
def top: Int
def pop: IntStack
}
class IntEmptyStack extends IntStack {
def isEmpty = true
def top = error("EmptyStack.top")
def pop = error("EmptyStack.pop")
}
И вот спецификации, которые я написал до сих пор:
import org.junit.runner.RunWith
import org.specs2.runner.JUnitRunner
import org.specs2.mutable.Specification
@RunWith(classOf[JUnitRunner])
class IntStackSpec extends Specification {
"IntEmptyStack" should {
val s = new IntEmptyStack
"be empty" in {
s.isEmpty must equalTo(true)
}
"raise error when top called" in {
s.top must throwA[RuntimeException]
}
}
}
Ошибка возникает в строке 13, "raise error when top called" in {
. Сообщение об ошибке: value must is not a member of Nothing
. Я думаю, что Scala выводит s.top
как Nothing, а не Int, как определено в абстрактном классе. Как в таком случае написать тест без ошибок?
Спасибо за любые комментарии/исправления к этому вопросу.
Ссылка на пример: Scala By Example