我有一个名为servision
的子项目有2个测试配置:
这是我的项目配置:
val beforeTest := taskKey[Unit]("Before test")
val ti = config("ti") extend (Test)
lazy val servision = project
.configs(regresion, ti)
.settings(
inConfig(ti)(Defaults.testTasks) ++
Seq(
testOptions in test := Seq(Tests.Filter(!_.startsWith("ti.")})),
testOptions in ti := Seq(Tests.Filter(_.startsWith("ti.")})),
test in ti := {
Def.sequential(beforeTest, test in ti).value
afterTest()
}
)
)
我发现,如果我重新定义ti:test
,则完全忽略ti:testOptions
,而使用test:testOptions
代替ti:testOptions
。
如果我注释掉重新定义,则使用update.replace('10.10.10.', 3600, dns.rdatatype.PTR, 'a.test.com')
。
我认为这是SBT中的一个错误,即错误配置。
答案 0 :(得分:0)
我找到了解决方法。
为了在测试之前和之后调用某些代码,可以使用testsListener
:
class TestsListenerBase extends TestsListener {
override def doInit() {}
override def doComplete(finalResult: TestResult.Value) {}
override def testEvent(event: TestEvent) {}
override def endGroup(name: String, t: Throwable) {}
override def endGroup(name: String, result: TestResult.Value) {}
override def startGroup(name: String) {}
}
def beforeTest() { .... }
def afterTest() { .... }
testListeners in ti += {
new TestsListenerBase {
override def doInit() {
beforeTest()
}
override def doComplete(finalResult: TestResult.Value) {}
afterTest()
}
}
此解决方案的主要不便之处在于beforeTest
和afterTest
不能成为任务,必须将其转换为函数。否则,它将被调用时无法控制。设置可以用作这些函数的参数。