管道日志消息和测试任务

时间:2014-12-04 14:05:03

标签: scala sbt

test task定义如下

lazy val UnitTest = config("unit").extend(Test)

Project("my-project", file("."))

testOptions in UnitTest := Seq(
    Tests.Argument("-h", "target/test-html"),
    Tests.Argument("-u", "target/test-xml"),
    Tests.Argument("-C", "SlowestTestReporter"),
    Tests.Argument("-oD"),
    Tests.Filter(testName => !testName.endsWith("Prop") && !testName.contains("Integration"))
)

有人请解释一下为什么测试任务覆盖首先打印测试输出,并且仅在消息"=== Unit Tests ==="之后

test in Test := {
  streams.value.log("=== Unit Tests ===")
  (test in UnitTest).value
}

如果我按照以下方式重新定义测试,那么一切都按预期工作

test in Test := (test in UnitTest).dependsOn(unitTestsWelcome).value

2 个答案:

答案 0 :(得分:2)

.value定义了一个依赖项。所有依赖项都在您的任务之前计算,而不是内联。如果您喜欢关于任务依赖性的顺序语义,请参阅sbt-sequential。

答案 1 :(得分:1)

请参阅Execution semantics of tasks

  

与普通的Scala方法调用不同,不会严格评估对任务调用value方法。相反,它们只是作为占位符来表示sampleIntTask取决于startServerstopServer任务。