gpt4 book ai didi

scala - 在 Scala 中测试异常

转载 作者:行者123 更新时间:2023-11-28 21:16:04 25 4
gpt4 key购买 nike

我想测试(在 Intellij Idea 测试框架中)以下代码:

def eval(t: Term): Term = t match {
case t if isVal(t) => t
case If(t1,t2,t3) if True == eval(t1) => eval(t2)
case If(t1,t2,t3) if False == eval(t1) => eval(t3)
case Succ(t) if isNum(eval(t)) => Succ(eval(t))
case Pred(t) => eval(t) match {
case Zero => Zero
case Succ(v) if isNum(v) => v
case _ => throw TermIsStuck(Pred(eval(t)))
}
case IsZero(t) => eval(t) match {
case Zero => True
case Succ(v) if isNum(v) =>False
case _ => throw TermIsStuck(IsZero(eval(t)))
}
case _ => throw TermIsStuck(t)
}

有关引用,您可以查看 this repository .所以我写了下面的测试:

 test("testEval") {

Arithmetic.term(new Arithmetic.lexical.Scanner("if iszero pred pred 2 then if iszero 0 then true else false else false")) match {
case Arithmetic.Success(res,next) => assert(eval(res) == True)
case Arithmetic.Failure(msg,next) => assert(false)
}

Arithmetic.term(new Arithmetic.lexical.Scanner("pred succ succ succ false")) match {
case Arithmetic.Success(res,next) => assert(Arithmetic.eval(res) == TermIsStuck(Succ(False)))
case Arithmetic.Failure(msg,next) => assert(false)
}

}

获取错误:

Succ(False)

fos.Arithmetic$TermIsStuck: Succ(False) ...

我怎样才能测试这个捕获错误?确实应该通过这个测试...

最佳答案

你在 Scala 中你不应该抛出异常,但在 scalatest 中你可以做这样的事情:

a[yourException.type] should be thrownBy yourFunction()

你可以做一个更好的版本,

case class Error(exception: Exception){

throw exception

???

}

或者类似的东西

case object Error

然后你检查一下:

Error shouldBe yourFunction() 

关于scala - 在 Scala 中测试异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58095626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com