В ScalaTest 1.5 появилась новая функция для тестирования нескольких наборов данных, которую вы можете попробовать в качестве снимка. Это выпущено в scala-tools.org:
идентификатор группы: org.scalatest
идентификатор артефакта: самый большой
версия: 1.5-SNAPSHOT
Вы добавляете (или импортируете элементы) TableDrivenPropertyChecks, а затем можете определять таблицы следующим образом:
val examples =
Table(
("a", "b", "c", "d"),
( 1, 1, 1, 1),
( 1, 1, 1, 1),
( 1, 1, 1, 1),
( 1, 1, 1, 1)
)
Вы передаете список переменных ar ar в Table. Каждый кортеж должен иметь одинаковую арность, в этом случае каждый кортеж имеет арность 4 (4 члена). Первый кортеж - это все строки, и они определяют имена для столбцов. Последующие кортежи определяют каждый ряд данных. Вы можете поместить любой тип в кортеж, но в целом каждый столбец будет содержать один и тот же тип. Хотя, если вы хотите, вы можете иметь столбцы типа Any, которые могут содержать что угодно. Вы можете иметь таблицу от 1 до 22 столбцов. Если вам нужно более 22 столбцов (в настоящее время максимальный размер кортежа в Scala составляет 22), вы можете использовать составной тип в одном или нескольких столбцах.
Как только у вас есть таблица, вы можете проверить их с помощью forAll вот так:
forAll (examples) { (a, b, c, d) =>
a + b + c + d should equal (4)
}
forAll принимает два списка параметров. Первая - это таблица, а вторая - «функция свойства», которая выражает нечто, что должно быть истинно для каждой строки таблицы. forAll возьмет каждую строку таблицы (конечно, пропуская строку заголовка имен столбцов) и удостоверится, что свойство выполнено. Если этого не произойдет, вы получите хорошее сообщение об ошибке, в котором будет указано, какая строка таблицы вышла из строя, какие значения были у названных столбцов и т. Д.
Таблица представляет собой Seq из кортежей данных, поэтому вы также можете использовать его как Seq. Например, вы можете получить Seq of Option [Exception], указывающий, какие строки потерпели неудачу, например:
for ((a, b, c, d) <- examples) yield {
failureOf { a + b + c + d should equal (4) }
}
Результирующий Seq содержит один Option для каждой строки данных в таблице, который равен None, если свойство передано для этой строки, и Some [Exception], если свойство не выполнено. Исключение в некоторых содержит все подробности об ошибке.