1

sbtコマンドを使用して、から specs2 テスト スイートを実行していtestます。ScalaCheck プロパティが失敗すると、specs2 の一致が失敗したコードのファイル名と行番号が表示されるだけです。これは、頻繁に行う一般的なタイプのチェックを実行するユーティリティ メソッドである場合にはあまり役に立ちません。 . スタック トレースの方がよいでしょう。

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 プロパティ ファイルで FINEST ログ レベルを有効にしています。

今のところ、Eclipse デバッガーを使用してこの問題を回避していますが、場合によっては不必要に重いものになります。

4

2 に答える 2

1

failtraceコマンドラインで引数を渡すことにより、スタックトレースの失敗を表示できます。これは、ユーザー ガイドの引数の部分に記載されています。

fullstacktraceまた、specs2自身のスタックが表示されないように、このスタック トレースがフィルター処理されていることも知っておく必要がありますTraceFilter

于 2012-10-09T02:32:37.620 に答える
0

失敗した一致を特定するために別のアプローチを取ることにしました-aka次のようにを使用します。

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

欠点は、これを手動で適用する必要があることですが、利点は、失敗を理解しやすいことです。

于 2012-10-09T16:53:27.250 に答える