首页 > 解决方案 > Scalatest 是否具有深度或递归“应该包含 theSameElementsAs”?

问题描述

虽然 Scalatest以与顺序无关的方式actual should contain theSameElementsAs expected比较序列,但作为每个比较元素的成员的序列以顺序感知的方式进行比较。是否有一种在元素内的序列上递归调用自身的变体?actualexpectedtheSameElementsAs

例如,假设我们有以下类:

case class A(
  id: String,
  bs: Seq[B]
)

case class B(
  id: String
)

我们还创建了一个测试来验证这些类的业务逻辑:

val expectedOutput = Array(
  A(
    id = "abc",
    bs = Array(
     B(id = "def"))),
  A(
    id = "rst",
    bs = Array(
      B(id = "uvw"),
      B(id = "xyz"))))

val actualOutput = myBusinessLogic(...)

actualOuptut should contain theSameElementsAs expectedOutput

因为myBusinessLogic恰好是一个 Spark 应用程序,它以不确定的顺序返回 的实例A和包含的实例,如下所示:BactualOutput

Array(
  A(
    id = "rst",
    bs = List(
      B(id = "xyz"),
      B(id = "uvw"))),
   A(
    id = "abc",
    bs = List(
     B(id = "def"))))

断言失败,因为xyz并且uvw在其A.bs领域内的顺序不同,但根据我们的规范,这仍然是有效的行为。我如何让断言在这里通过?

标签: scalascalatest

解决方案


推荐阅读