片段评估错误

时间:2011-09-14 16:06:33

标签: scala lift specs mongodb-scala

有人可以告诉我“碎片评估错误”的含义,或者我可能在哪里寻找解决方案?我有时(但不总是)得到很多这些错误(不改变我的代码):

[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。

另外:我不知道它是否重要,但Post是net.liftweb.mongodb.record.MongoRecord类伴侣对象:

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

1 个答案:

答案 0 :(得分:2)

在specs2规范中,Fragments是规范的一部分。 Fragment可以是TextExampleStep

某些片段(如ExampleStep)意味着要执行,并且应该捕获异常,以便将它们标记为失败。但他们不会抓住Error s(AssertionError除外)。因此,如果示例抛出OutOfMemoryError,则会将其报告为片段评估错误。

其他片段(如Text片段)在评估时不应抛出异常。如果他们这样做,您将收到相同的Fragment evaluation error消息。

如果没有看到完整的规范,我很难说出那里发生了什么,但我怀疑你在Example的主体中抛出了非异常类型。但我现在有更多问题而不是答案:

  • 在哪里宣布test4?在规范体内?在Context案例类中?
  • 因为错误是间歇性发生的,你确定你总是有一个合适的mongodb上下文吗?也许你的规范示例是在同一个mongo db实例上同时执行的?