scala 在使用sbt和testng时,如何获得测试中抛出的异常的完整堆栈跟踪?

bwitn5fc  于 2023-06-29  发布在  Scala
关注(0)|答案(2)|浏览(216)

堆栈跟踪被截断-例如以[info] ...结尾
使用last或更改traceLevel没有帮助-它只是打印出sbt Package 器的完整堆栈跟踪。
这是使用testng进行测试(我相信也使用scalatest和sl 4j)

s4n0splo

s4n0splo1#

使用documentation here中的提示:
(引述)
您可以通过四种方式配置使用sbt运行时显示的输出:1)关闭颜色,2)显示短堆栈跟踪,3)完整堆栈跟踪,以及4)显示所有内容的持续时间。为此,您必须向ScalaTest传递一个-o参数,并在-o之后放置以下内容的任意组合:

  • D -显示持续时间
  • S -显示短叠加轨迹
  • F -显示完整堆栈轨迹
  • W -无颜色

例如,“-oDF”将显示完整的堆栈跟踪和持续时间(每个测试所花费的时间)。
要将参数从sbt传递到ScalaTest,您可以全局添加测试选项,如下所示:

testOptions in Test += Tests.Argument("-oD")

(See网站的其余报价)
您可以使用以下sbt命令在测试中启用完整堆栈跟踪:

> set testOptions in YourProjectName += Tests.Argument("-oF")

根据Sasha的评论,这也可以在每个测试运行中从命令行完成,如下所示。

sbt test -- -oF
btxsgosb

btxsgosb2#

作为让SBT打印完整堆栈跟踪的替代方法,您可以在测试运行器周围放置一个try-catch块吗?例如,从REPL:

scala> try { throw new Exception } catch { case e => e }
res1: java.lang.Throwable = java.lang.Exception

scala> res1.printStackTrace
java.lang.Exception
    at $line2.$read$$iw$$iw$.liftedTree1$1(<console>:8)
    at $line2.$read$$iw$$iw$.<init>(<console>:8)
    at $line2.$read$$iw$$iw$.<clinit>(<console>)
    ...

相关问题