In Memory DBを用いてDBを利用した際に困ったことをメモ。
BeforeExample, AfterExampleを使って、事前処理にテストデータの作成を、事後処理にテストデータの破棄を行おうとしました。例えば
def before = new WithApplication(FakeApplication(additionalConfiguration = inMemoryDatabase(options=Map("MODE" -> "MySQL")))){
DB withSession{implicit session =>
slickDataHandler.insert(data)
}
}
def after = new WithApplication(FakeApplication(additionalConfiguration = inMemoryDatabase(options=Map("MODE" -> "MySQL")))){
DB withSession{implicit session =>
slickDataHandler.filter(_.id === data.id).delete
}
}
のような感じ。この時、beforeを出るとデータがなくなっていることがわかり、そもそもテストデータを事前処理で入れるということが出来なかった。何かいい手が無いか探り中。
[追記]
https://www.playframework.com/documentation/2.1.0/ScalaTest
に書かれている下記コードのような感じでいけるのかも。試してみる。
abstract class WithDbData extends WithApplication {
override def around[T](t: => T)(implicit evidence: (T) => Result) = super.around {
prepareDbWithData()
t
}
}
"Computer model" should {
"be retrieved by id" in new WithDbData {
// your test code
}
"be retrieved by email" in new WithDbData {
// your test code
}
}