Scala 如何在specs2中将输入和结果定义为数据表?

Scala 如何在specs2中将输入和结果定义为数据表?,scala,testing,specs2,Scala,Testing,Specs2,我试图在specs2中使用DataTables来定义输入和结果应该是什么样子,但无法让它工作。我的想法与下面的代码类似: class MySpec extends Specification with DataTables { "A Container" should { "after data is added container should have the following data" in new TestContainer { "a" | "flag" | "d" |

我试图在specs2中使用DataTables来定义输入和结果应该是什么样子,但无法让它工作。我的想法与下面的代码类似:

class MySpec extends Specification with DataTables {

"A Container" should {
"after data is added container should have the following data" in new TestContainer {
  "a"  | "flag" | "d"   |
  100  ! 1      ! "abc" |
  300  ! 1      ! "abc" |
  200  ! 0      ! "xyz" |>
  { (a, flag, d) =>
    container.add(Data(a, flag, d)) must not(throwA[Exception])
  } and
  "a"  | "flag" | "d"   |
  300  ! 1      ! "abc" |
  100  ! 1      ! "abc" |>
  { (a, flag, d) => ????
  }
}
}

免责声明:我是scala和specs的新手。为了简洁起见,省略了一些代码。

在更好地理解规范2之后,我提出了一个解决方案:

class MySpec extends Specification with DataTables {

"A Container" should {
"after data is added container should have the following data" in new TestContainer {
  "a"  | "flag" | "d"   |
  100  ! 1      ! "abc" |
  300  ! 1      ! "abc" |
  200  ! 0      ! "xyz" |>
  { (a, flag, d) =>
    container.add(Data(a, flag, d)) must not(throwAn[Exception])
  }
  val state = container.list
  "a"  | "flag" | "d"   |
  300  ! 1      ! "abc" |
  100  ! 1      ! "abc" |>
  { (a, flag, d) => state must contain((a, flag, d))
  }
}
}

若顺序很重要,那个么第二个表可以将元组添加到某个列表中,然后在处理第二个表之后比较两个列表。请注意,此行为在2.3中被破坏,但在2.4-SNAPSHOT中有效。

在更好地理解规范2后,我提出了一个解决方案:

class MySpec extends Specification with DataTables {

"A Container" should {
"after data is added container should have the following data" in new TestContainer {
  "a"  | "flag" | "d"   |
  100  ! 1      ! "abc" |
  300  ! 1      ! "abc" |
  200  ! 0      ! "xyz" |>
  { (a, flag, d) =>
    container.add(Data(a, flag, d)) must not(throwAn[Exception])
  }
  val state = container.list
  "a"  | "flag" | "d"   |
  300  ! 1      ! "abc" |
  100  ! 1      ! "abc" |>
  { (a, flag, d) => state must contain((a, flag, d))
  }
}
}

若顺序很重要,那个么第二个表可以将元组添加到某个列表中,然后在处理第二个表之后比较两个列表。请注意,此行为在2.3中被破坏,但在2.4-SNAPSHOT中有效。

在更好地理解规范2后,我提出了一个解决方案:

class MySpec extends Specification with DataTables {

"A Container" should {
"after data is added container should have the following data" in new TestContainer {
  "a"  | "flag" | "d"   |
  100  ! 1      ! "abc" |
  300  ! 1      ! "abc" |
  200  ! 0      ! "xyz" |>
  { (a, flag, d) =>
    container.add(Data(a, flag, d)) must not(throwAn[Exception])
  }
  val state = container.list
  "a"  | "flag" | "d"   |
  300  ! 1      ! "abc" |
  100  ! 1      ! "abc" |>
  { (a, flag, d) => state must contain((a, flag, d))
  }
}
}

若顺序很重要,那个么第二个表可以将元组添加到某个列表中,然后在处理第二个表之后比较两个列表。请注意,此行为在2.3中被破坏,但在2.4-SNAPSHOT中有效。

在更好地理解规范2后,我提出了一个解决方案:

class MySpec extends Specification with DataTables {

"A Container" should {
"after data is added container should have the following data" in new TestContainer {
  "a"  | "flag" | "d"   |
  100  ! 1      ! "abc" |
  300  ! 1      ! "abc" |
  200  ! 0      ! "xyz" |>
  { (a, flag, d) =>
    container.add(Data(a, flag, d)) must not(throwAn[Exception])
  }
  val state = container.list
  "a"  | "flag" | "d"   |
  300  ! 1      ! "abc" |
  100  ! 1      ! "abc" |>
  { (a, flag, d) => state must contain((a, flag, d))
  }
}
}


若顺序很重要,那个么第二个表可以将元组添加到某个列表中,然后在处理第二个表之后比较两个列表。请注意,此行为在2.3中被破坏,但在2.4-SNAPSHOT中起作用。

您能更具体地说明什么不起作用吗?在添加第一个数据表和第二个数据表中的数据后,我找不到比较容器状态的简单方法。第二个DataTable显示container.list()应返回的内容。为什么不将所有数据放在一个表中:输入和预期输出?如果我添加另一列,指示该行是结果还是输入,这将起作用。如果输入和结果的数据格式不同,这种方法将不起作用。我的意思是在同一行上具有给定调用的输入值和预期输出。您能更具体地说明什么不起作用吗?在添加第一个数据表和第二个数据表中的数据后,我找不到比较容器状态的简单方法。第二个DataTable显示container.list()应返回的内容。为什么不将所有数据放在一个表中:输入和预期输出?如果我添加另一列,指示该行是结果还是输入,这将起作用。如果输入和结果的数据格式不同,这种方法将不起作用。我的意思是在同一行上具有给定调用的输入值和预期输出。您能更具体地说明什么不起作用吗?在添加第一个数据表和第二个数据表中的数据后,我找不到比较容器状态的简单方法。第二个DataTable显示container.list()应返回的内容。为什么不将所有数据放在一个表中:输入和预期输出?如果我添加另一列,指示该行是结果还是输入,这将起作用。如果输入和结果的数据格式不同,这种方法将不起作用。我的意思是在同一行上具有给定调用的输入值和预期输出。您能更具体地说明什么不起作用吗?在添加第一个数据表和第二个数据表中的数据后,我找不到比较容器状态的简单方法。第二个DataTable显示container.list()应返回的内容。为什么不将所有数据放在一个表中:输入和预期输出?如果我添加另一列,指示该行是结果还是输入,这将起作用。如果输入和结果的数据格式不同,这种方法将不起作用。我的意思是在同一行上同时具有给定调用的输入值和预期输出。