【问题标题】:Fragment Evaluation Error片段评估错误
【发布时间】:2011-09-14 16:06:33
【问题描述】:

谁能告诉我“片段评估错误”是什么意思,或者我可以在哪里寻找解决方案?我有时(但不总是)会遇到很多这样的错误(无需更改我的代码):

[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] { ... }

【问题讨论】:

  • 这里有一个方便的链接到source code of FutureTask.java。第 138 行是对 sync.innerRun() 的调用:public void run() { sync.innerRun(); }
  • 我也遇到了 mongo 和 specs2 的问题

标签: scala lift specs mongodb-scala


【解决方案1】:

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

一些片段,如ExampleStep 是要被执行的,并且应该捕获异常,以便将它们标记为失败。但他们不会抓住Errors(AssertionErrors 除外)。所以如果一个 Example 抛出一个OutOfMemoryError,这将被报告为一个 Fragment 评估错误。

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

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

  • test4 在哪里声明?在规范主体内?在 Context 案例类中?
  • 由于错误是间歇性发生的,你确定你总是有一个正确的 mongodb 上下文吗?也许您的规范示例正在同一个 mongo db 实例上同时执行?

【讨论】:

  • test4 在规范正文中声明。在这种情况下,我正在调用的方法 (Post.fixJValue(JValue):JValue) 只是一种方便的方法,可以方便地放置在 Post 对象中(...嗯...)——它实际上在 mongodb 上不起作用.
  • 也许您可以尝试将 val 声明为惰性 val,以便在示例执行期间真正进行评估。
  • 您关于“上下文”的注释让我开始思考和寻找新的方向。我敢打赌 MongoMetaRecord 对象的初始化会导致问题。而且,我敢打赌,将这个方法移出那个对象会解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多