繁体   English   中英

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

[英]Any way to suppress stack traces from ScalaTest in latest SBT versions?

当SBT中的ScalaTest测试失败时,我得到堆栈跟踪。 我已尝试set traceLevel in Test := -1在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。 那可能吗?

您可以使用“-o ...”而不使用F或S(即“-o”或“-oD”不会给您堆栈跟踪,但不能使用“-oF”,“ - S”或“-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 
    }
  }
}

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

(不是权威,但因为没有其他人回答:)

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

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

set logLevel in Test := Level.Warn

但请注意,这不仅会抑制堆栈跟踪,还会抑制示例中以[info]开头的所有行。 相反,你最后会得到[error]东西,这至少会让套件的名称失败。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM