Scalatest: как проверить, содержит ли коллекция элемент, удовлетворяющий определенным критериям

Скажем, у меня есть список книг:

val books = List(
    Book(title="Foo", year=2014),
    Book(title="Bar", year=2014))

Как проверить одним выражением, что коллекция books не пуста и содержит только книги, изданные в 2014 году?


person Alex Vayda    schedule 19.09.2014    source источник
comment
Здесь нашел очень похожий вопрос - stackoverflow.com/questions/6997939/   -  person Alex Vayda    schedule 20.09.2014


Ответы (1)


Используя matchers:

books should not be empty
books.map(_.year) should contain only (2014)

Или просто:

books.map(_.year) should contain only (2014)

поскольку эта проверка утверждает, что список не пуст.

person Jean Logeart    schedule 19.09.2014
comment
Забыл упомянуть в вопросе - я хочу сделать это с помощью одного совпадающего выражения. Другими словами, мне нужен экземпляр Matcher, который выполняет эту проверку. Этого легко добиться двумя should, но как их объединить в один? - person Alex Vayda; 20.09.2014
comment
Почему ты бы так поступил? Проверяйте каждое утверждение отдельно. - person Jean Logeart; 20.09.2014
comment
Вторая проверка делает то, что вы хотите: если список содержит только книги 2014 года, то он не пуст. - person Jean Logeart; 20.09.2014
comment
Я хочу составить единый Matcher, который будет проверять данную коллекцию всеми возможными способами. Непустой чек — это просто пример. Идея состоит в том, чтобы найти способ составления сопоставителей с помощью and и or, чтобы один сопоставитель проверял свойства коллекции (например, размер коллекции), а другой сопоставитель проверял элемент коллекции. Я пытался использовать have сопоставитель таким образом - book should (have size 1 and contain(have (...))), но это не сработало - person Alex Vayda; 20.09.2014
comment
Может быть, вам нужен пользовательский сопоставитель? scalest.org/user_guide/using_matchers#usingCustomMatchers - person Kulu Limpa; 20.09.2014
comment
Кажется, так. Просто подумал, что это возможно со стандартными матчерами. Очевидно нет. - person Alex Vayda; 20.09.2014
comment
Состав сопоставителей (руководство: scalastest.org/user_guide/) не то, что вы ищешь? - person tilois; 20.09.2014