从Scala的SBT中获取堆栈跟踪信息

5

背景:在SBT管理的项目中编写Scala单元测试。

当我执行sbt test运行我的单元测试时,我的代码中的某个断言失败了,我会得到类似以下的输出(没有更多信息):

Test com.reach.ml.test.TestLSHEasy.T0 failed: assertion failed

这告诉我是哪个单元测试导致了断言失败,但不知道是哪个断言失败了。如果我直接运行相同的测试(而不使用sbt),我会得到整个堆栈跟踪,这对于调试非常有用。所以我的问题是:当测试崩溃时,如何让SBT打印出堆栈跟踪?


“last test” 不是显示了测试执行的所有输出吗? - Geo
不,当一切正常时与测试相关的输出完整内容如下: """ [info] Passed: : Total 9, Failed 0, Errors 0, Passed 9, Skipped 0 [success] Total time: 9 s, completed Aug 22, 2011 11:33:29 PM """ 如果出现错误,则只有我最初发布的那行以及另一行基本相同的内容。 - emchristiansen
Geo 的意思是,当 SBT 上的 test 失败并抛出异常时,输入 last test 不就会显示完整的异常信息吗? - Daniel C. Sobral
1个回答

2
关于xsbt,它可能与util.log.StackTrace对象有关,该对象可以修剪其输出。
问题 118 阐明了保持堆栈跟踪应该得到更好控制的意愿:

所以默认情况下不应看到那个跟踪。

也许您可以包装您的单元测试,拦截任何异常,并显式打印它们的完整堆栈跟踪?(如Basic.scalaBoot.scala)。

1
谢谢。看起来开发人员在尝试清理错误打印时有些过头了。无论如何,SBT是一个很棒的工具,用try/catch块进行包装虽然不是最理想的,但也不难。 - emchristiansen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接