2011-09-14 8 views
1

「フラグメント評価エラー」の意味、またはソリューションの場所を教えてもらえますか?時々I(常にではない)(私のコードを変更せずに)、これらのエラーの多くを得る:フラグメント評価エラー

[error] ! Fragment evaluation error 
[error]  ThrowableException: Could not initialize class code.model.Post$ (FutureTask.java:138) 
[error] code.model.PostSpec$$anonfun$1$$anonfun$apply$1.apply$mcZ$sp(PostSpec.scala:68) 
[error] code.model.PostSpec$$anonfun$1$$anonfun$apply$1.apply(PostSpec.scala:51) 
[error] code.model.PostSpec$$anonfun$1$$anonfun$apply$1.apply(PostSpec.scala:51) 

PostSpecのライン68は、Postモデルのコンパニオンオブジェクトを参照(specs2)テストで最初の行です

val test4 = Post.fixJValue(toextract4).extract[Selection] 

私はScala 2.9.0-1を使用しています。

も:私はそれが重要なのかどうかわかりませんが、ポストはnet.liftweb.mongodb.record.MongoRecordクラスのコンパニオンオブジェクトです:specs2仕様で

object Post extends Post with MongoMetaRecord[Post] { ... } 
+0

スペックタグが追加されました。 –

+0

[FutureTask.javaのソースコード](http://javasourcecode.org/html/open-source/jdk/jdk-6u23/java/util/concurrent/FutureTask.java.html)への便利なリンクがあります。行138はsync.innerRun()への呼び出しです。 'public void run(){ sync.innerRun(); } ' – brandon

+0

私もmongoとspecs2に関する問題を抱えています – wbarksdale

答えて

2

Fragmentsは、仕様の一部です。 Fragmentは、Text,Example,Stepとすることができる。

ExampleStepのようなフラグメントは、実行されることを意図されており、例外をキャッチして障害としてマークすることができます。しかし、彼らはErrorを捕まえません(AssertionErrorを除く)。したがって、例でOutOfMemoryErrorがスローされた場合、これはフラグメント評価エラーとして報告されます。

Textのような他のフラグメントは、評価時に例外をスローすることは想定されていません。もしそうなら、あなたは同じFragment evaluation errorメッセージを受け取るでしょう。

仕様書全体を見ることなく、そこに何が起こっているのかを言うのは難しいですが、Exampleの本体に例外以外の型がスローされていると思われます。しかし、今のところ答えよりも多くの質問があります:

  • ここで、test4は宣言されていますか?仕様本体の中に?ケースクラスContextの中に?
  • エラーが断続的に発生するため、常に適切なmongodbコンテキストを使用していますか?おそらく、あなたの仕様の例は、同じmongo dbインスタンス上で同時に実行されていますか?
+0

' test4'は仕様本体の中で宣言されています。この場合、私が呼び出すメソッド( 'Post.fixJValue(JValue):JValue')は' Post'オブジェクトの中に置くのに便利な便利なメソッドです。それは実際にmongodbには何の仕事もしません。 – brandon

+0

valを怠惰なvalとして宣言しようとすると、実際に評価が実行されることがあります。 – Eric

+0

「コンテキスト」についてのあなたの注意は、私を考えさせて、新しい方向に向かって探していました。私はMongoMetaRecordオブジェクトの初期化が問題を引き起こしていると確信しています。そして、私はそのメソッドからこのメソッドを移動することで問題が解決されると確信しています。 – brandon