Как определить ввод и результат как DataTable в spec2?

Я пытался использовать DataTables в specs2, чтобы определить как входные данные, так и то, как должен выглядеть результат, и не смог заставить его работать. Я думал о чем-то похожем на приведенный ниже код:

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 и спецификациях. Часть кода была опущена для краткости.


person andruha    schedule 29.01.2014    source источник
comment
Можно поконкретнее, что не работает?   -  person Eric    schedule 30.01.2014
comment
Я не могу найти простой способ сравнить состояние контейнера после добавления данных из первого DataTable со вторым DataTable. Второй DataTable показывает, что должен возвращать container.list().   -  person andruha    schedule 31.01.2014
comment
Почему бы вам не поместить все данные в одну таблицу: как входные данные, так и ожидаемые результаты?   -  person Eric    schedule 02.02.2014
comment
Это будет работать, если я добавлю еще один столбец, указывающий, является ли строка результатом или вводом. Этот подход не будет работать, если формат данных ввода и результата различаются.   -  person andruha    schedule 03.02.2014
comment
Я имел в виду наличие как входных значений, так и ожидаемых результатов для данного вызова в одной строке.   -  person Eric    schedule 04.02.2014
comment
Это не сработает. Контейнер может удалить некоторые входные строки при их добавлении, плюс меня беспокоит порядок результатов независимо от порядка добавления входных строк.   -  person andruha    schedule 04.02.2014
comment
Я ищу что-то похожее на таблицу данных, различающуюся в Cucumber cukes.info/step-definitions.html. Просто найдите отличия в таблице данных.   -  person andruha    schedule 04.02.2014


Ответы (1)


После лучшего понимания спецификаций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 списка после обработки второй таблицы. Обратите внимание, что это поведение не работает в версии 2.3, но работает в версии 2.4-SNAPSHOT.

person andruha    schedule 04.04.2014