我试图测试一个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的代码库,没有这种具体实现的例子。
答案 0 :(得分:1)
我们无法在不使用演员的情况下完成这项工作。这是我的实施:
Firebase Storage SDK