具有执行环境的 Specs2 ForEach 上下文
Specs2 ForEach context with execution env
我正在使用 specs2 库执行我的单元测试。目前我正在使用 ForEach 上下文将我的数据库注入单元测试,如下例所示:
trait DatabaseContext extends ForEach[Transaction] {
// you need to define the "foreach" method
def foreach[R: AsResult](f: Transaction => R): Result = {
val transaction = openDatabaseTransaction
try AsResult(f(transaction))
finally closeDatabaseTransaction(transaction)
}
// create and close a transaction
def openDatabaseTransaction: Transaction = ???
def closeDatabaseTransaction(t: Transaction) = ???
}
这种方法让我可以像这样编写测试:
"test 1" >> { t: Transaction =>
println("use the transaction")
ok
}
我的问题是我在测试中还需要 ExecutionEnv
,因为我正在使用 specs2
未来的匹配器期望。
"test 1" >> { implicit env: ExecutionEnv =>
Future(1) must be_==( 0 ).await
}
如何将这两种方法结合起来,以便我可以使用 ForEach 访问我的测试中的执行环境?
我已经尝试过使用这段代码,但它无法编译
"test 1" >> { implicit env: ExecutionEnv =>
new DatabaseContext { t: Transaccion =>
myFuture must be_==( "some result" ).await
}
}
如果有任何建议,我将不胜感激。
非常感谢大家
您应该能够以这种方式将它们链接在一起:
"test with env and transaction" >> { implicit env: ExecutionEnv => t:Transaction =>
Future(1) must be_==( 0 ).await
println("use the transaction")
ok
}
使用最新版本的 specs2(3.6.5 是最新版本),您可以简单地 "inject" the execution environment as a class member:
class MySpec(implicit ee: ExecutionEnv) extends Specification {
...
}
然后您可以像以前一样使用您的 DatabaseContext
。
我正在使用 specs2 库执行我的单元测试。目前我正在使用 ForEach 上下文将我的数据库注入单元测试,如下例所示:
trait DatabaseContext extends ForEach[Transaction] {
// you need to define the "foreach" method
def foreach[R: AsResult](f: Transaction => R): Result = {
val transaction = openDatabaseTransaction
try AsResult(f(transaction))
finally closeDatabaseTransaction(transaction)
}
// create and close a transaction
def openDatabaseTransaction: Transaction = ???
def closeDatabaseTransaction(t: Transaction) = ???
}
这种方法让我可以像这样编写测试:
"test 1" >> { t: Transaction =>
println("use the transaction")
ok
}
我的问题是我在测试中还需要 ExecutionEnv
,因为我正在使用 specs2
未来的匹配器期望。
"test 1" >> { implicit env: ExecutionEnv =>
Future(1) must be_==( 0 ).await
}
如何将这两种方法结合起来,以便我可以使用 ForEach 访问我的测试中的执行环境? 我已经尝试过使用这段代码,但它无法编译
"test 1" >> { implicit env: ExecutionEnv =>
new DatabaseContext { t: Transaccion =>
myFuture must be_==( "some result" ).await
}
}
如果有任何建议,我将不胜感激。 非常感谢大家
您应该能够以这种方式将它们链接在一起:
"test with env and transaction" >> { implicit env: ExecutionEnv => t:Transaction =>
Future(1) must be_==( 0 ).await
println("use the transaction")
ok
}
使用最新版本的 specs2(3.6.5 是最新版本),您可以简单地 "inject" the execution environment as a class member:
class MySpec(implicit ee: ExecutionEnv) extends Specification {
...
}
然后您可以像以前一样使用您的 DatabaseContext
。