2011-08-23 66 views
5

上下文:在由SBT管理的项目中编写Scala单元测试。使用Scala从SBT获取堆栈跟踪

当我执行sbt test运行我的单元测试的断言在我的代码某处出现故障时,我得到类似如下(仅此而已):

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

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

+0

“最后测试”是否显示测试执行的所有输出? – Geo

+0

不,整个测试相关的输出,当工作是: “”“ [信息]通过::共9,失败0,错误0,通过9,跳过0 [成功]总时间:9秒,已完成2011年8月22日下午11:33:29 PM “”“” 如果有错误,只是我第一次发布的行和另一个说基本上相同的事情。 – emchristiansen

+0

Geo的含义是,当'test'在SBT上失败并且没有输入'last test'时会显示完整的异常? –

回答

2

关于xsbt,它可能与可以修剪其输出的util.log.StackTrace对象有关。
issue 118所示保持堆栈跟踪应该是更好的控制之下的意愿:

所以你不应该看到,跟踪默认。

也许你可以用你的单元测试,拦截任何异常,并明确地打印他们的堆栈跟踪? (如在Basic.scalaBoot.scala中)。

+1

谢谢。看起来开发人员在尝试清理错误打印时有点过度。在任何情况下,SBT都是一个很好的工具,并且使用try/catch块封装,虽然不理想,但并不难。 – emchristiansen