У меня есть рабочее утверждение Hamcrest:
assertThat(mylist, contains(
containsString("15"),
containsString("217")));
Предполагаемое поведение:
mylist == asList("Abcd15", "217aB")
=> успехmyList == asList("Abcd15", "218")
=> сбой
Как мне перенести это выражение на assertJ. Конечно, существуют наивные решения, такие как утверждение первого и второго значения, например:
assertThat(mylist.get(0)).contains("15");
assertThat(mylist.get(1)).contains("217");
Но это утверждения для элементов списка, а не для списка. Использование утверждений в списке ограничивает меня очень общими функциями. Так что, возможно, это можно было бы разрешить только с помощью настраиваемого утверждения, что-то вроде следующего было бы нормально:
assertThat(mylist).elements()
.next().contains("15")
.next().contains("217")
Но прежде чем я напишу собственное утверждение, мне было бы интересно узнать, как другие решат эту проблему?
Изменить: одно дополнительное нефункциональное требование заключается в том, что тест должен легко расширяться за счет дополнительных ограничений. В Hamcrest довольно легко выразить дополнительные ограничения, например
assertThat(mylist, contains(
emptyString(), //additional element
allOf(containsString("08"), containsString("15")), //extended constraint
containsString("217"))); // unchanged
Для этого примера тесты, зависящие от индекса списка, должны быть перенумерованы. Тесты, использующие настраиваемое условие, должны будут переписать полное условие (обратите внимание, что ограничения в allOf
не ограничиваются проверками подстроки).