有没有类似于TestNg dependsOnMethods注解的scalaTest机制
我可以在scalaTest规范之间有依赖关系吗?如果测试失败,所有依赖它的测试都会被跳过?
我没有添加TestNG的这个功能,因为那时我没有任何令人信服的用例来证明它的正确性。 之后我收集了一些使用案例,并且正在为下一个ScalaTest版本添加一个功能来解决它。 但它不会是依赖测试,只是一种基于未满足前提条件的“取消”测试的方法。
同时你可以做的只是简单地使用Scala if语句来只在满足条件时注册测试,或者如果你希望看到它的输出,将它们注册为忽略。 如果你使用Spec,它看起来像这样:
if (databaseIsAvailable) {
it("should do something that requires the database") {
// ...
}
it ("should do something else that requires the database") {
}
}
这只有在测试施工时确实满足条件时才有效。 如果数据库例如应该由beforeAll方法启动,那么你可能需要在每个测试中进行检查。 在这种情况下,你可以说它正在等待。 就像是:
it("should do something that requires the database") {
if (!databaseIsAvailable) pending
// ...
}
it("should do something else that requires the database") {
if (!databaseIsAvailable) pending
// ...
}
这是一个斯卡拉特质,如果任何测试失败,它将使测试套件中的所有测试都失败。
(感谢这个建议,Jens Schauder(他发表了另一个关于这个问题的答案)。)
优点:简单易懂的测试依赖关系。
缺点:不是非常可定制的。
我用它来进行自动浏览器测试。 如果某件事情失败了,那么通常没有必要继续与GUI进行交互,因为它处于“混乱”状态。
许可证:公共领域(Creative Common的CC0),或(根据您的选择)MIT许可证。
import org.scalatest.{Suite, SuiteMixin}
import scala.util.control.NonFatal
/**
* If one test fails, then this traits cancels all remaining tests.
*/
trait CancelAllOnFirstFailure extends SuiteMixin {
self: Suite =>
private var anyFailure = false
abstract override def withFixture(test: NoArgTest) {
if (anyFailure) {
cancel
}
else try {
super.withFixture(test)
}
catch {
case ex: TestPendingException =>
throw ex
case NonFatal(t: Throwable) =>
anyFailure = true
throw t
}
}
}
我不知道现成的解决方案。 但是你可以很容易地编写自己的灯具。
请参阅Suite特征的javadoc中的“编写可堆叠夹具特征”
举例来说,这样的夹具可以替换第一个执行后的所有测试执行,并调用pending
上一篇: is there a scalaTest mechanism similar to TestNg dependsOnMethods annotation