2011-09-14 65 views
1

有人能告訴我什麼是「片段評估錯誤」的意思,或者我可能在哪裏尋找解決方案?我有時(但不總是)獲得大量的這些錯誤(不改變我的代碼):片段評估錯誤

[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是在(specs2)測試引用Post模型同伴對象的第一行:

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

我正在使用Scala 2.9.0-1。

另外:我不知道是否重要,但郵政是一個net.liftweb.mongodb.record.MongoRecord類同伴對象:

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

在specs2規範,Fragments是規範的碎片。 A Fragment可以是TextExampleStep

一些片段,如ExampleStep意味着要執行,並應該捕獲異常,以便它們可以被標記爲失敗。但他們不會趕上Error s(AssertionError s除外)。所以如果一個例子拋出一個OutOfMemoryError,這將被報告爲一個片段評估錯誤。

其他片段,如Text片段在被評估時不應該拋出異常。如果他們這樣做,你會得到相同的Fragment evaluation error消息。

沒有看到完整的規範,我很難說出那裏發生了什麼,但我懷疑你在Example的主體中引發了一個非Exception類型。但我有更多的問題比現在的答案:

  • 其中是test4宣佈?在規範體內? Context案例課內?
  • 由於錯誤間歇性發生,你確定你總是有一個適當的mongodb上下文嗎?也許你的規範示例是在同一個mongo數據庫實例上同時執行的?
+0

'test4'是在規範體內聲明的。在這種情況下,我調用的方法('Post.fixJValue(JValue):JValue')只是一個方便的方法,它可以方便地放置在Post對象中 - 它實際上在mongodb上沒有任何工作。 – brandon

+0

也許你可以嘗試將val聲明爲lazy val,以便在示例執行過程中真正進行評估。 – Eric

+0

然而,關於「背景」的註釋讓我思考和尋找新的方向。我敢打賭,MongoMetaRecord對象的初始化會導致問題。而且,我敢打賭,將該方法移出該對象將解決該問題。 – brandon