Я искал матчи ScalaTest, чтобы проверить, что список содержит все необходимые элементы (данные в другом списке), но это могут быть и другие.
contain allOf
требует получить два фиксированных элемента по какой-либо причине, остальные как varargs.
Я могу сделать обходной путь, как это, но это ужасно уродливо:
val list = List(1,2,3,4)
val wanted = List(1,2,3)
list should contain allOf ( wanted.head, wanted.tail.head, wanted.tail.tail :_* ) // ugly workaround
Для указания списка в качестве совпадения есть contain theSameElementsAs
. Однако, это не позволяет посторонним элементам находиться в пробном значении (я думаю).
Итак:
- Я что-то упустил?
- Почему
allOf
объявлен таким образом, что ему должны быть заданы два фиксированных элемента в фронте (т.е. почему бы не просто передать varargs?) - должен ли быть метод
theSameElementsAndMaybeMoreThan
(предположительно с лучшим именем)?
Некоторый код, который я пробовал с помощью:
val list = List.empty[String]
//list should contain allOf("a") // does not compile
list should contain allOf("a","b")
list should contain allOf("a","b","c")
val wanted = List("a","b","c")
//list should contain allOf( wanted ) // does not compile
list should contain allOf( wanted.head, wanted.tail ) // compiles, but tests the wrong thing; against List(head,List(tail))
Scala 2.11.4, ScalaTest 2.2.1
Edit:
Я, вероятно, в конечном итоге использую что-то вроде:
wanted.foreach( list should contain(_) )
Однако это не кажется мне доступным для чтения (should
является встроенным) как встроенные конструкторы коллекции.