如何更改Play Framework 2“测试”设置以显示完整的堆栈跟踪?

我在Play框架中使用Java,并且我在通过IDE(IntelliJ)运行时通过了一些测试(function测试),但是当我通过控制台运行测试时失败了。

我的问题是测试日志中显示的堆栈跟踪只有2行,我需要完整的堆栈跟踪来查看那里发生了什么,我尝试了这里提到的任何设置组合: spec2设置都通过放置它们在build.sbt或在命令行中提供它们。 似乎没有效果! 这是我的build.sbt

 version := "1.0-SNAPSHOT" libraryDependencies ++= Seq( javaJdbc, javaEbean, cache, filters ) logBuffered in Test := false testOptions += Tests.Argument(TestFrameworks.JUnit, "-v") testOptions += Tests.Argument("fullStackTrace","true") traceLevel := 50 

有谁可以帮助我吗? 我正在使用Typesafe激活器(播放2.2.2)。 谢谢

Play 2.3.2中,可以使用build.sbt中的-a选项来build.sbt

 testOptions += Tests.Argument(TestFrameworks.JUnit, "-a") 

我用:

 testOptions += Tests.Argument(TestFrameworks.JUnit, "-v", "-q", "-a") 

因为这提供了测试开始/完成的消息( -v )并且抑制了传递的测试( -q )的日志记录。


所有可用选项都可以在SBT JUnit界面中找到 :

  • -v在日志级别“info”而不是“debug”上记录“test run started”/“test started”/“test run finished”事件。
  • -q为成功测试抑制stdout。 Stderr通常会打印到控制台。 将Stdout写入缓冲区并在测试成功时丢弃。 如果失败,则将缓冲区转储到控制台。 由于Java中的stdio重定向是一个糟糕的问题(System.setOut()通过本机代码更改静态最终字段System.out),这可能不适用于所有方案。 Scala拥有自己的控制台,具有理智的重定向function。 如果在类路径上检测到Scala,则junit-interface也会尝试重新路由scala.Console的stdout。
  • -n即使sbt报告它们受支持,也不要在输出中使用ANSI颜色。
  • -s尝试解码堆栈跟踪和测试名称中的Scala名称。 如果类路径上没有匹配的Scala库,则静默回退到未解码的名称。
  • -a显示AssertionErrors的堆栈跟踪和exception类名称(由JUnit中的所有assert *方法抛出)。 如果没有此选项,失败的断言不会打印堆栈跟踪或“java.lang.AssertionError:”前缀。
  • -c不要为任何消息打印exception类名称前缀。 使用此选项,仅显示getMessage()的结果和堆栈跟踪。
  • +v关闭-v。 优先于-v。
  • +q关闭-q。 优先于-q。
  • +n关闭-n。 优先于-n。
  • +s关掉-s。 优先于-s。
  • +a关闭-a。 优先于-a。
  • +c关闭-c。 优先于-c。
  • --ignore-runners=如果此列表中包含Runner类名,则使用@RunWith注释忽略测试。 默认值为org.junit.runners.Suite。
  • --tests=仅运行名称与指定正则表达式之一匹配的测试(在逗号分隔列表中)。 不匹配的测试将被忽略。 只匹配单个测试用例名称,而不是测试类。 示例:对于测试MyClassTest.testBasic(),仅匹配“testBasic”。 使用sbt的test-only命令来匹配测试类。
  • -Dkey=value在测试运行期间临时设置系统属性。 测试结束后,该属性将恢复为之前的值。 请注意,系统属性对于整个JVM是全局的,并且可以以非事务方式进行修改,因此您应该以串行方式运行测试,而不是并行执行任何其他依赖于已修改属性的任务。
  • --run-listener=一个(用户定义的)类,它扩展了org.junit.runner.notification.RunListener。 创建此类的实例并将其添加到JUnit Runner,以便它将接收运行事件。 有关更多信息,请参见RunListener。 注意:这使用了test-classloader,因此需要在src / test或src / main中定义类,或者将其作为测试或编译依赖项包含在内
  • --include-categories=应包含的以逗号分隔的类别类名列表。 仅运行具有一个或多个这些类别的测试。
  • --exclude-categories=应排除的以逗号分隔的类别类名列表。 不会运行与这些类别中的一个或多个匹配的测试。

Play 2.2.3刚刚发布。 包含针对bug 2535的修复,我认为这可能是您所看到的问题。

https://groups.google.com/forum/#!topic/play-framework/KP1_DbhcxlU