2012-10-08 69 views
1

我正在運行sbt的specs2測試套件,使用test命令。當ScalaCheck屬性失敗時,我只能在我的代碼中看到specs2匹配失敗的文件名和行號 - 當這恰好是一種實用方法時,這種做法並不是非常有用,它常常執行常見的檢查類型。堆棧跟蹤會更好。從specs2中的失敗Scalacheck屬性中確定確切的失敗匹配

我試過了sbt中的last命令,但是這並不顯示我正在尋找的堆棧跟蹤。唯一的堆棧跟蹤last顯示這是一個通用:

java.lang.RuntimeException: Tests unsuccessful 
     at scala.sys.package$.error(package.scala:27) 
     at scala.Predef$.error(Predef.scala:66) 
     at sbt.Tests$.showResults(Tests.scala:168) 
     at sbt.Defaults$$anonfun$testTasks$5.apply(Defaults.scala:279) 
     at sbt.Defaults$$anonfun$testTasks$5.apply(Defaults.scala:279) 
     at sbt.Scoped$$anonfun$hf2$1.apply(Structure.scala:473) 
     at sbt.Scoped$$anonfun$hf2$1.apply(Structure.scala:473) 
     at scala.Function1$$anonfun$compose$1.apply(Function1.scala:41) 
     at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$11.apply(Structure.scala:295) 
     at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$11.apply(Structure.scala:295) 
     at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40) 
     at sbt.std.Transform$$anon$5.work(System.scala:67) 
     at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:221) 
     at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:221) 
     at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) 
     at sbt.Execute.work(Execute.scala:227) 
     at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:221) 
     at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:221) 
     at sbt.CompletionService$$anon$1$$anon$2.call(CompletionService.scala:26) 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:662) 

我也有屬性文件中的java.util.logging啓用最詳細的日誌記錄級別。

現在我正在使用Eclipse調試器解決此問題,但這在某些情況下是不必要的重量級。

回答

1

您可以通過在命令行上傳遞參數failtrace來顯示堆棧跟蹤失敗。這在用戶指南的Arguments部分有記錄。

而且你要知道,這個堆棧跟蹤進行過濾以避免顯示,所以如果你想看到你需要添加fullstacktrace這是一個TraceFilter可以過濾任何一個shortcut一切specs2自己的堆棧。

+0

不幸的是,我添加了這兩個,但現在我遇到了一個不同的失敗的匹配,並且我看不到匹配失敗的位置。我認爲堆棧跟蹤是在比賽實際失敗後生成的。 –

0

,我決定採取不同的方法來識別失敗的匹配 - 使用aka,像這樣:

def occurExactlyOnceInBody = be_===(1) ^^ { (s: String) => body.tails.count(_.startsWith(s)) aka "No. of occurences of " + s + " in body" } 

缺點是這並不需要手動應用,但好處是很容易理解的故障。