有没有办法在最新的SBT版本中抑制ScalaTest的堆栈跟踪?

时间:2013-10-15 14:27:44

标签: scala sbt scalatest

当SBT中的ScalaTest测试失败时,我得到堆栈跟踪。我在SBT提示符下尝试set traceLevel in Test := -1,尝试更改build.sbt文件中的内容等,但似乎没有任何帮助。

我想摆脱的是:

> test
[info] TestWritingFunctions:
[info] - threeSquares examples *** FAILED ***
[info]   scala.NotImplementedError: an implementation is missing
[info]   at scala.Predef$.$qmark$qmark$qmark(Predef.scala:252)
[info]   at TestWritingFunctions$$anonfun$1.apply$mcV$sp(WritingFunctions.scala:17)
[info]   at TestWritingFunctions$$anonfun$1.apply(WritingFunctions.scala:16)
[info]   at TestWritingFunctions$$anonfun$1.apply(WritingFunctions.scala:16)
[info]   at org.scalatest.Transformer$$anonfun$apply$1.apply(Transformer.scala:22)
[info]   at org.scalatest.Transformer$$anonfun$apply$1.apply(Transformer.scala:22)
[info]   at org.scalatest.OutcomeOf$class.outcomeOf(OutcomeOf.scala:85)
[info]   at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
[info]   at org.scalatest.Transformer.apply(Transformer.scala:22)
[info]   at org.scalatest.Transformer.apply(Transformer.scala:20)
[info]   ...

正如您所看到的,测试失败了,因为我使用了新的???构造作为占位符,但是因为我知道那里有占位符,所以我只想要一条*** FAILED ***消息而不是全部rigamarole。这可能吗?

2 个答案:

答案 0 :(得分:4)

您可以使用“-o ...”而不使用F或S(即“-o”或“-oD”不会给您堆栈跟踪,但不能使用“-oF”,“ - OS”或“ -oDS“会给你一个堆栈跟踪)。这意味着您将抑制所有堆栈跟踪。如果你根本没有指定记者,你会得到一个“-o”,这意味着没有堆栈痕迹。

如果你喜欢一般的短堆栈跟踪,但是当????抛出NotImplementedError时不想看到它们,你可以覆盖withFixture并将NotImplementedError更改为挂起的测试:

import org.scalatest._

trait PendingIfUnimplemented extends SuiteMixin { this: Suite =>

  abstract override def withFixture(test: NoArgTest): Outcome = {
    super.withFixture(test) match {
      case Failed(ex: NotImplementedError) => Pending
      case other => other 
    }
  }
}

通过这种方式,无论您选择什么,您仍然可以获得常规故障的短,长或无堆栈跟踪,但是看到(待定)因为???而失败的测试。

答案 1 :(得分:2)

(不具有权威性,但由于没有其他人回答:)

我怀疑traceLevel没有做任何事情,因为堆栈跟踪来自ScalaTest,而不是来自sbt。

sbt确实有logLevel设置是相关的。试试这个:

set logLevel in Test := Level.Warn

但请注意,这不仅会抑制堆栈跟踪,还会抑制示例中以[info]开头的所有行。相反,你只需要在最后获得[error]内容,这至少会使套件的名称失败。

如果你真的只想在不改变其他任何东西的情况下抑制堆栈跟踪,我认为这可能是不可能的。查看http://www.scalatest.org/user_guide/using_the_runner,我看到了使堆栈跟踪更短(-oS)或更长(-oF)的选项,但没有完全省略堆栈跟踪的选项。