Похоже, вы не используете какой-либо широко распространенной среды тестирования для scala (такой как scalatest или specs2 ) - очевидной рекомендацией будет использование некоторых.
Однако, если вы хотите придерживаться подхода «без фреймворка», одним из вариантов будет использование старого доброго try .. catch
:
val term = Arithmetic.term(
new Arithmetic.lexical.Scanner("pred succ succ succ false")
)
try {
val evaluated = term match {
case Arithmetic.Success(res,next) => Arithmetic.eval(res)
case Arithmetic.Failure(msg,next) => assert(false)
}
} catch {
case TermIsStuck(Succ(False)) => // do nothing, or explicitly mark test as successful
case _ => assert(false) // any other exception should fail the test
}
Однако, я думаю, что реализация частично сломана - этоникогда не возвращает Arithmetic.Failure
, но выдает исключение.Я думаю, что целью Arithmetic.Failure
было именно то, чтобы охватить такие случаи.Если это так, то лучшей реализацией будет замена throw TermIsStuck
на Arithmetic.Failure(TermIsStuck(...))
.