How can I get complete stacktraces for exceptions thrown in tests when using sbt and testng?
ScalaTestngSbtScalatestSlf4jScala Problem Overview
The stacktraces are truncated - e.g. they end with [info] ...
Using last
or changing traceLevel
doesn't help - it simply prints the complete stacktrace of the sbt wrapper.
This is testing with testng (also I believe using scalatest and sl4j)
Scala Solutions
Solution 1 - Scala
Using hints found in the documentation here:
(quoted)
> You can configure the output shown when running with sbt in four ways: 1) turn off color, 2) show short stack traces, 3) full stack traces, and 4) show durations for everything. To do so you must pass a -o argument to ScalaTest, and after the -o, place any combination of: > > * D - show durations > * S - show short stack traces > * F - show full stack traces > * W - without color > > For example, "-oDF" would show full stack traces and durations (the amount of time spent in each test). > > To pass arguments from sbt to ScalaTest you can either add test options globally, like this: > > testOptions in Test += Tests.Argument("-oD")
(See the website for the rest of the quote)
You can use the following sbt command to enable full stack traces in tests:
> set testOptions in YourProjectName += Tests.Argument("-oF")
Per Sasha's comment, this can also be done from the command line per test run as shown below.
$ sbt test -- -oF
Solution 2 - Scala
As an alternative to getting SBT to print the full stack trace, could you put a try
-catch
block around your test runner? For example, from the 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>)
...