创建DatabaseConfigProvider的实现

时间:2016-09-08 13:25:28

标签: scala unit-testing playframework h2

我试图测试一个Slick Play应用程序而无需启动并通过Play应用程序上下文运行所有内容(使用H2)。这是因为我想分享H2连接,并且事先做了很多测试DB准备。

为此,我需要DatabaseConfigProvider实施。在这种情况下,我需要一个JdbcProfile配置。我延伸的特点是:

trait DatabaseConfigProvider {
  def get[P <: BasicProfile]: DatabaseConfig[P]
}

但是,我无法获得DatabaseConfigProvider方法的签名来键入支票。

class TestDbProvider(config:DatabaseConfig[JdbcProfile]) extends DatabaseConfigProvider {
  def get[P <: BasicProfile]: DatabaseConfig[P] = config
}

上述实现以及许多其他变体都失败了。

[error] RepositoryTest.scala:78: type mismatch;
[error]  found   : slick.backend.DatabaseConfig[slick.driver.JdbcProfile]
[error]  required: slick.backend.DatabaseConfig[P]
[error]     def get[P <: BasicProfile]: DatabaseConfig[P] = config
[error]                                                     ^
[error] one error found
[error] (api/test:compileIncremental) Compilation failed

更糟糕的变种:

// Fails
class TestDbProvider(config:DatabaseConfig[JdbcProfile]) extends DatabaseConfigProvider {
  def get[P <: BasicProfile]: DatabaseConfig[JdbcProfile] = config
}

// Fails
class TestDbProvider[P <: BasicProfile](config:DatabaseConfig[P]) extends DatabaseConfigProvider {
  def get[P]: DatabaseConfig[P] = config
}

// Fails
class TestDbProvider(config:DatabaseConfig[JdbcProfile]) extends DatabaseConfigProvider {
  def get[JdbcProfile]: DatabaseConfig[JdbcProfile] = config
}

Scala实现DatabaseConfigProvider的诀窍是什么?通过Slick / Play的代码库,没有这种具体实现的例子。

1 个答案:

答案 0 :(得分:1)

我们无法在不使用演员的情况下完成这项工作。这是我的实施:

Firebase Storage SDK