Ошибка оценки фрагмента
Может кто-нибудь сказать мне, что означает "Ошибка оценки фрагмента", или где я мог бы искать решения? Иногда я (но не всегда) получаю много таких ошибок (без изменения моего кода):
[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)
Строка 68 PostSpec - это первая строка в тесте (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 ответ
В спецификации specs2, Fragments
являются частями спецификации. Fragment
может быть Text
, Example
, Step
,
Некоторые фрагменты, такие как Example
а также Step
предназначены для выполнения и должны перехватывать исключения, чтобы они могли быть помечены как сбои. Но они не поймают Error
с (кроме AssertionError
с). Так что, если пример бросает OutOfMemoryError
, это будет сообщено как ошибка оценки фрагмента.
Другие фрагменты, как Text
фрагменты не должны вызывать исключения при оценке. Если они это сделают, вы получите то же самое Fragment evaluation error
сообщение.
Не видя полной спецификации, мне трудно сказать, что там происходит, но я подозреваю, что в теле человека был брошен тип без исключения. Example
, Но у меня сейчас больше вопросов, чем ответов:
- где
test4
объявили? Внутри тела спецификации? ВнутриContext
класс дела? - так как ошибки происходят периодически, вы уверены, что у вас всегда есть правильный контекст mongodb? Может быть, ваши примеры спецификаций выполняются одновременно на одном и том же экземпляре mongo db?