重新定义测试任务时,将忽略testOptions设置

时间:2015-12-30 09:09:02

标签: testing sbt

我有一个名为servision的子项目有2个测试配置:

  • TI
  • 测试

这是我的项目配置:

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中的一个错误,即错误配置。

1 个答案:

答案 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()
        }
}

此解决方案的主要不便之处在于beforeTestafterTest不能成为任务,必须将其转换为函数。否则,它将被调用时无法控制。设置可以用作这些函数的参数。