Play+Scala测试Slick数据库



我正在尝试为我的项目创建一个使用 Play 2.6 和 Scala 2.12 的测试类。我已经导入了 scalatest 库:

libraryDependencies += guice
libraryDependencies += evolutions
libraryDependencies += jdbc
libraryDependencies += filters
libraryDependencies += "com.h2database" % "h2" % "1.4.194"
libraryDependencies += "com.typesafe.play" %% "anorm" % "2.5.3"
libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "3.1.0" % Test
libraryDependencies += "org.scala-lang" % "scala-actors" % "2.10.0-M7" % "test"
libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.4"
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.4" % "test"
libraryDependencies += "com.typesafe.play" %% "play-slick" % "3.0.0"
libraryDependencies += "com.typesafe.play" %% "play-slick-evolutions" % "3.0.0"
libraryDependencies += "org.xerial" % "sqlite-jdbc" % "3.19.3"

我的编译器说 ShouldMatchers 在 scalatest 库中不存在。

class RackRepositorySpec extends PlaySpec with GuiceOneAppPerTest with Injecting {
  val database = Databases(
    driver = "org.sqlite.JDBC",
    url = "jdbc:sqlite:development.db",
    name = "default",
    config = Map(
      "username" -> "",
      "password" -> ""
    )
  )
  val guice = new GuiceInjectorBuilder()
    .overrides(bind[Database].toInstance(database))
    .injector()
  val defaultDbProvider = guice.instanceOf[DatabaseConfigProvider]
  def beforeAll() = Evolutions.applyEvolutions(database)
  def afterAll() = {
    // Evolutions.cleanupEvolutions(database)
    database.shutdown()
  }
  Evolution(
    1,
    "create table test (id bigint not null, name varchar(255));",
    "drop table test;"
  )
}

我得到了最新版本的 Scalate,但似乎这个类不再存在了。我遵循这个例子:https://dzone.com/articles/getting-started-play-21-scala有没有人有另一个例子来为 Slick 内存数据库构建 Scala 测试?

[info] RackRepositorySpec:
[info] models.RackRepositorySpec *** ABORTED ***
[info]   com.google.inject.ConfigurationException: Guice configuration errors:
[info] 
[info] 1) No implementation for play.api.db.slick.DatabaseConfigProvider was bound.
[info]   while locating play.api.db.slick.DatabaseConfigProvider
[info] 
[info] 1 error
[info]   at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1045)
[info]   at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
[info]   at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1054)
[info]   at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:409)
[info]   at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:404)
[info]   at play.api.inject.ContextClassLoaderInjector.$anonfun$instanceOf$2(Injector.scala:117)
[info]   at play.api.inject.ContextClassLoaderInjector.withContext(Injector.scala:126)
[info]   at play.api.inject.ContextClassLoaderInjector.instanceOf(Injector.scala:117)
[info]   at models.RackRepositorySpec.<init>(RackRepositorySpec.scala:26)
[info]   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

亲切问候菲 利 普

我确实在我的一个Scala项目中使用了Slick,并且我有Postgress作为我的数据库。出于单元测试的目的,我在内存数据库中创建了一个测试 h2,该测试在单元测试期间填充,并在测试完成后拆除。

您可以在此处查看示例:

https://github.com/joesan/plant-simulator/blob/master/test/com/inland24/plantsim/services/database/PowerPlantDBServiceSpec.scala

我还想做的是实现某种自动化,在 ii 中我想填充 h2 数据文件并永久保留它们以用于下一个单元测试周期。

ShouldMatchers在版本 2 中被

弃用,在版本 3 中被删除。请改用MatchersMustMatchers

请参阅发行说明。

最新更新