gpt4 book ai didi

scala - 设置使SBT在错误时快速失败(停止)

转载 作者:行者123 更新时间:2023-12-03 09:12:46 31 4
gpt4 key购买 nike

我正在运行一个多项目SBT(v0.13)构建,并且希望它在子项目中遇到的第一个错误(编译)时快速失败(停止)。

当前的行为是,当某项无法在子项目中进行编译时,构建将继续(以编译所有其他子项目)。

一旦遇到第一个带有编译错误的子项目,是否有一种方法/设置可以使SBT停止并退出?

最佳答案

简而言之,据我所知,不,SBT不能在编译器或测试错误上“快速失败”。

据我所知,SBT无法控制这一点。 SBT将在检查您的单元测试时调用适当的测试框架。然后,测试框架可以决定运行测试的顺序,同时运行它们,如何报告问题等。当然,每个测试框架都有自己的功能,配置和约定。 Scala的两个最广泛使用的测试框架是ScalaTest和Specs2。

幸运的是,您可以在Specs2或ScalaTest中获得所需的行为。我在下面提供了简单的单元测试示例,但这些示例早期失败了。

ScalaTest

通过混合CancelAfterFailure特征,可以在ScalaTest中获得针对单个测试套件的快速失败行为。例如,此测试将执行第一个测试,第二个测试失败,并显示第三个已取消。

class SomeSuite extends FunSuite with CancelAfterFailure with Assertions {

test("first") {
println("first")
}

test("second") {
assert(false)
}

test("third") {
println("third")
}
}

规格2

与ScalaTest相似,您可以基于每个规范控制Specs2中的行为。要获得类似快速失败的行为,您需要在规范中添加两个参数: sequentialstopOnFail。有关可以设置的参数的完整列表,请参见 the docs。 (如果您想要明显的线性顺序,则确实需要两者,因为默认情况下Specs2将同时执行测试!)
class SomeSpec extends Specification {

sequential
stopOnFail

"specs2" should {
"first" in {
println("first")
ok
}

"second" in {
"foo" must equalTo ("bar")
}

"third" in {
println("third")
}
}
}

关于scala - 设置使SBT在错误时快速失败(停止),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31716024/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com