【发布时间】:2017-01-16 11:05:30
【问题描述】:
我正在尝试测试 Slick Play 应用程序,而无需通过 Play 应用程序上下文(使用 H2)启动和运行所有内容。这是因为我想共享 H2 连接并事先做大量的测试数据库准备。
为此,我需要一个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 的代码库,没有这样具体实现的例子。
【问题讨论】:
标签: scala unit-testing playframework h2