unit tests with Squeryl-Record

61 views
Skip to first unread message

Andrzej Skalski

unread,
Jul 24, 2015, 8:26:41 AM7/24/15
to Lift
Hi,

I have a lot of methods I would like to test, that rely on database access (like: whether file insertion to database correctly matches duplicates).

Yet even the simplest test using any Record (like FileRecord) crashes (details below).

I feel that's because I need to setup a mock database for these tests (like H2) but I don't know how to do it.

Is there any short tutorial on tests using database with Squeryl-Record?

Kindest Regards
Andrzej Skalski

simple test:

object ASFileRecordTest extends Specification with Loggable {

  "insert record" should {

    "work" in {

      def sc = {
        val rec = ASFileRecord.insertImgUnsafe(
          "dupa.jpg",
          "jpg",
          "dupa".getBytes,
          "",
          None)
      }

      sc must throwA[Exception]
    }
  }

}

crash:

[error]    ExceptionInInitializerError:   (ASFileRecord.scala:47)
[error] code.model.ASFileRecord$.table(ASFileRecord.scala:47)
[error] code.model.ASFileRecord.saveTheRecord(ASFileRecord.scala:31)
[error] code.model.ASFileRecord$.insertImgUnsafe(ASFileRecord.scala:72)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.code$model$ASFileRecordTest$$anonfun$$anonfun$$sc$1(ASFileRecordTest.scala:15)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply$mcV$sp(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.apply(ASFileRecordTest.scala:12)
[error] org.squeryl.internals.PosoMetaData$$anonfun$4.apply(PosoMetaData.scala:119)
[error] org.squeryl.internals.PosoMetaData$$anonfun$4.apply(PosoMetaData.scala:80)
[error] org.squeryl.internals.PosoMetaData.<init>(PosoMetaData.scala:80)
[error] org.squeryl.View.<init>(View.scala:66)
[error] org.squeryl.Table.<init>(Table.scala:29)
[error] org.squeryl.Schema$class.table(Schema.scala:340)
[error] code.model.MatapSchema$.table(MatapSchema.scala:5)
[error] code.model.MatapSchema$.<init>(MatapSchema.scala:7)
[error] code.model.MatapSchema$.<clinit>(MatapSchema.scala)
[error] code.model.ASFileRecord$.table(ASFileRecord.scala:47)
[error] code.model.ASFileRecord.saveTheRecord(ASFileRecord.scala:31)
[error] code.model.ASFileRecord$.insertImgUnsafe(ASFileRecord.scala:72)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.code$model$ASFileRecordTest$$anonfun$$anonfun$$sc$1(ASFileRecordTest.scala:15)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply$mcV$sp(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.apply(ASFileRecordTest.scala:12)
[error] org.squeryl.internals.FieldMetaData$$anonfun$org$squeryl$internals$FieldMetaData$$_createCustomTypeFactory$1.apply(FieldMetaData.scala:554)
[error] org.squeryl.internals.FieldMetaData$$anonfun$org$squeryl$internals$FieldMetaData$$_createCustomTypeFactory$1.apply(FieldMetaData.scala:547)
[error] org.squeryl.internals.FieldMetaData$.org$squeryl$internals$FieldMetaData$$_createCustomTypeFactory(FieldMetaData.scala:547)
[error] org.squeryl.internals.FieldMetaData$$anon$1.build(FieldMetaData.scala:446)
[error] org.squeryl.internals.PosoMetaData$$anonfun$4.apply(PosoMetaData.scala:112)
[error] org.squeryl.internals.PosoMetaData$$anonfun$4.apply(PosoMetaData.scala:80)
[error] org.squeryl.internals.PosoMetaData.<init>(PosoMetaData.scala:80)
[error] org.squeryl.View.<init>(View.scala:66)
[error] org.squeryl.Table.<init>(Table.scala:29)
[error] org.squeryl.Schema$class.table(Schema.scala:340)
[error] code.model.MatapSchema$.table(MatapSchema.scala:5)
[error] code.model.MatapSchema$.<init>(MatapSchema.scala:7)
[error] code.model.MatapSchema$.<clinit>(MatapSchema.scala)
[error] code.model.ASFileRecord$.table(ASFileRecord.scala:47)
[error] code.model.ASFileRecord.saveTheRecord(ASFileRecord.scala:31)
[error] code.model.ASFileRecord$.insertImgUnsafe(ASFileRecord.scala:72)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.code$model$ASFileRecordTest$$anonfun$$anonfun$$sc$1(ASFileRecordTest.scala:15)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply$mcV$sp(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.apply(ASFileRecordTest.scala:12)
[error]
[error] Caused by java.lang.RuntimeException: error while reflecting on metadata for (Some(private final net.liftweb.record.field.OptionalStringField code.model.User.middleName),Some(public net.liftweb.record.field.OptionalStringField code.model.User.middleName()),None,Set()) of class code.model.User
[error] org.squeryl.internals.PosoMetaData$$anonfun$4.apply(PosoMetaData.scala:119)
[error] org.squeryl.internals.PosoMetaData$$anonfun$4.apply(PosoMetaData.scala:80)
[error] org.squeryl.internals.PosoMetaData.<init>(PosoMetaData.scala:80)
[error] org.squeryl.View.<init>(View.scala:66)
[error] org.squeryl.Table.<init>(Table.scala:29)
[error] org.squeryl.Schema$class.table(Schema.scala:340)
[error] code.model.MatapSchema$.table(MatapSchema.scala:5)
[error] code.model.MatapSchema$.<init>(MatapSchema.scala:7)
[error] code.model.MatapSchema$.<clinit>(MatapSchema.scala)
[error] code.model.ASFileRecord$.table(ASFileRecord.scala:47)
[error] code.model.ASFileRecord.saveTheRecord(ASFileRecord.scala:31)
[error] code.model.ASFileRecord$.insertImgUnsafe(ASFileRecord.scala:72)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.code$model$ASFileRecordTest$$anonfun$$anonfun$$sc$1(ASFileRecordTest.scala:15)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply$mcV$sp(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.apply(ASFileRecordTest.scala:12)
[error]
[error] Caused by java.lang.NoSuchMethodException: net.liftweb.record.field.OptionalStringField.<init>(scala.Option)
[error] org.squeryl.internals.FieldMetaData$$anonfun$org$squeryl$internals$FieldMetaData$$_createCustomTypeFactory$1.apply(FieldMetaData.scala:554)
[error] org.squeryl.internals.FieldMetaData$$anonfun$org$squeryl$internals$FieldMetaData$$_createCustomTypeFactory$1.apply(FieldMetaData.scala:547)
[error] org.squeryl.internals.FieldMetaData$.org$squeryl$internals$FieldMetaData$$_createCustomTypeFactory(FieldMetaData.scala:547)
[error] org.squeryl.internals.FieldMetaData$$anon$1.build(FieldMetaData.scala:446)
[error] org.squeryl.internals.PosoMetaData$$anonfun$4.apply(PosoMetaData.scala:112)
[error] org.squeryl.internals.PosoMetaData$$anonfun$4.apply(PosoMetaData.scala:80)
[error] org.squeryl.internals.PosoMetaData.<init>(PosoMetaData.scala:80)
[error] org.squeryl.View.<init>(View.scala:66)
[error] org.squeryl.Table.<init>(Table.scala:29)
[error] org.squeryl.Schema$class.table(Schema.scala:340)
[error] code.model.MatapSchema$.table(MatapSchema.scala:5)
[error] code.model.MatapSchema$.<init>(MatapSchema.scala:7)
[error] code.model.MatapSchema$.<clinit>(MatapSchema.scala)
[error] code.model.ASFileRecord$.table(ASFileRecord.scala:47)
[error] code.model.ASFileRecord.saveTheRecord(ASFileRecord.scala:31)
[error] code.model.ASFileRecord$.insertImgUnsafe(ASFileRecord.scala:72)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.code$model$ASFileRecordTest$$anonfun$$anonfun$$sc$1(ASFileRecordTest.scala:15)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply$mcV$sp(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2$$anonfun$apply$1.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.apply(ASFileRecordTest.scala:23)
[error] code.model.ASFileRecordTest$$anonfun$1$$anonfun$apply$2.apply(ASFileRecordTest.scala:12)


Andrzej Skalski

unread,
Jul 24, 2015, 8:36:07 AM7/24/15
to Lift, andrzej....@gmail.com
I added "transaction" around the method call, and of course "not" before "throwA"

now I have:

[info] insert record should
[info] x work
[error]    Got the exception java.lang.RuntimeException: org.squeryl.SessionFactory not initialized, SessionFactory.concreteFactory must be assigned a
[error]    function for creating new org.squeryl.Session, before transaction can be used.
[error]    Alternatively SessionFactory.externalTransactionManagementAdapter can initialized, please refer to the documentation. (ASFileRecordTest.scala:26)

Andrzej Skalski

unread,
Jul 24, 2015, 8:55:33 AM7/24/15
to Lift, andrzej....@gmail.com
Found the answer here:

https://github.com/lift/lift/blob/master/framework/lift-persistence/lift-squeryl-record/src/test/scala/net/liftweb/squerylrecord/Fixtures.scala

class DBHelper. then I use it like this:

class ASFileRecordTest extends Specification with Loggable {

  step("init mock database")

  DBHelper.initSquerylRecordWithInMemoryDB()
  DBHelper.createSchema()


  step("everything else")
(...)

is there a wiki I could help to expand?

Andrzej


W dniu piątek, 24 lipca 2015 14:26:41 UTC+2 użytkownik Andrzej Skalski napisał:
Reply all
Reply to author
Forward
0 new messages