Как прервать тест и вернуть ошибку при истинности условия?

Как прервать тест и вернуть ошибку при истинности условия?

Есть тест, в котором проверяется, что все кусочки одной строки входят в другую.

Если же какая-то часть не входит, то тест должен завершиться с ошибкой. Я не понимаю, как это реализовать.

for ( int i= 0 ; i<testLegalAddressArray. length ; i++)

Хотелось бы вместо break увидеть ошибку выполнения теста. Как это сделать?

Не судите строго за такой вопрос, я совсем новичок в этом деле. Очень надеюсь на помощь.

#2 Petrov.Sergey
  • ФИО: Petrov Sergey
  • Город: МО, Лобня

Есть тест, в котором проверяется, что все кусочки одной строки входят в другую.Если же какая-то часть не входит, то тест должен завершиться с ошибкой. Я не понимаю, как это реализовать.

for ( int i= 0 ; i<testLegalAddressArray. length ; i++)

Хотелось бы вместо break увидеть ошибку выполнения теста. Как это сделать?

Не судите строго за такой вопрос, я совсем новичок в этом деле. Очень надеюсь на помощь.

1) Насколько я понял задачу, тест является пройденным, если весь список №1 входит в список №2. Если не весь, то тест не пройден.2) Проверка на то, что весь список List list1 входит полностью в список List list2 пишется средствами языка JAVA так:

Метод containsAll(Collection<> C) возвращает TRUE, если каждый элемент коллекции C содержится в исследуемой коллекции. Если хоть один не содержится, возвращает FALSE.3) Соответственно, проверка на это выглядит так:

В случае несрабатывания условия (вернулся FALSE) тест считается непройденным и выдаётся сообщение в кавычках.list1.removeAll(list2) - оставляет только те элементы, которые не содержатся в list2.

Важное уточнение: в приведённом мной коде я оперировал исключительно списками - классами интерфейса List.Если тип = String[], то наиболее кошерное решение — сначала преобразовать массивы в списки:

и дальше работать по предложенному алгоритму.

#3 Delirium
  • ФИО: Юлия

Спасибо большое за ответ.

Чтобы будет в результате? Тест упадет?

Моя переменная legalAddress не является коллекцией, это просто срока, разбивать ее и превращать в коллекцию нецелесообразно, потому что в этом и суть теста - найти все кусочки второй строки в первой, но в первой при этом может быть еще что угодно.

#4 Petrov.Sergey
  • ФИО: Petrov Sergey
  • Город: МО, Лобня

Спасибо большое за ответ.

Есть вопросы:

assertTrue ( list2 . containsAll ( list1 ), "Элементы " + ListUtils . subtract ( list1 , list2 ) + " не найдены в списке list2" );

Чтобы будет в результате? Тест упадет?

Моя переменная legalAddress не является коллекцией, это просто срока, разбивать ее и превращать в коллекцию нецелесообразно, потому что в этом и суть теста - найти все кусочки второй строки в первой, но в первой при этом может быть еще что угодно.

1) я чуть-чуть изменил и дописал свой ответ. Импорт класса ListUtils не обязателен, есть другой, более быстрый способ (на него и изменил).

2) Проверять вхождение всех слов одной строки в другой лучше делать не через поиск слова в строке, а именно через:

Преимущества листа перед массивом:

1) Лист имеет динамическую длину. В то время как массив - статическую (как его объявили изначально, с такой длиной он и останется до конца жизни).

2) переход от одного элемента списка к другому происходит по линку (ссылке), что быстрее, чем переход по индексу в массиве.

3) Удаление элемента из списка является гораздо менее ресурсоёмкой задачей, чем удаление элемента из массива. Почему? В списке удаление элемента Х влечёт 2 операции: X.getPrevious().next() = X.getNext() и X = null. То есть перекидка указателя на следующий и "обнуление текущего". В массиве удаление элемента Х влечёт за собой сдвиг всех последующих элементов на 1 влево и обнуление последнего элемента. Если длина массива 1.000.000 элементов, то ресурсоёмкость в 500.000 раз больше.

К счастью, преимущество 2 практически нивелировано тем, что по массиву можно пробегаться итератором:

Теперь по сути вопроса:

1) Что будет в результате? Тест упадёт?

Если условие вернёт TRUE (все элементы включаются), то тест не упадёт и будет считаться пройдённым. В консоли текст ошибки не увидите.

Если условие вернёт FALSE (хотя бы 1 элемент не содержится), то тест не упадёт, но будет считаться "не пройденным" (красным), а в консоли увидите текст ошибки.

2) Моя переменная legalAddress не является коллекцией, это просто срока

Я описал чуть выше в этом комменте, как из строки сделать список.

3) разбивать ее и превращать в коллекцию нецелесообразно, потому что в этом и суть теста - найти все кусочки второй строки в первой, но в первой при этом может быть еще что угодно.

Изначально Вы говорили, что задача: убедиться, что все "кусочки" одной строки содержатся в другой.

Теперь говорите, что задача: найти все "кусочки", которые содержатся в другой.

Определитесь для начала с задачей.

#5 Delirium
  • ФИО: Юлия

Определитесь для начала с задачей.

Что Вы хотите?

Возможно, немного не поняли друг друга.

Есть строка legalAddress = 123123, Российская Федерация, Респ. Адыгея, Кошехабльский р-н, с. Вольное, ул. Ленина, дом 5 (это адрес, который есть)

Есть строка testLegalAddress = Российская Федерация, Респ. Адыгея, с. Вольное, ул. Ленина, дом 5 (это адрес, который сгенерирован, в нем нет индекса и нет района)

Вторую строку разбиваю на подстроки по ",_" и пытаюсь убедиться, что все они входят по очереди в первую строку. Если какая-то не входит, то в моем сгенерированном адресе есть что-то лишнее и тест должен упасть.

Суть вопроса не в том, как проверить вхождение. А в том, как заставить тест упасть. Насколько получается осознать, можно использовать assertTrue() , и для нее неважно, как я проверяю вхождения и какие типы данных использую. Правильно?

Попробую обязательно переписать на List, но это другая задача уже.

Еще бы надо проверить, что не только нет ничего лишнего, но и есть все нужное, над этим думаю.

#6 Petrov.Sergey
  • ФИО: Petrov Sergey
  • Город: МО, Лобня

Возможно, немного не поняли друг друга.

Есть строка legalAddress = 123123, Российская Федерация, Респ. Адыгея, Кошехабльский р-н, с. Вольное, ул. Ленина, дом 5 (это адрес, который есть)Есть строка testLegalAddress = Российская Федерация, Респ. Адыгея, с. Вольное, ул. Ленина, дом 5 (это адрес, который сгенерирован, в нем нет индекса и нет района)

Вторую строку разбиваю на подстроки по ",_" и пытаюсь убедиться, что все они входят по очереди в первую строку. Если какая-то не входит, то в моем сгенерированном адресе есть что-то лишнее и тест должен упасть.

Суть вопроса не в том, как проверить вхождение. А в том, как заставить тест упасть. Насколько получается осознать, можно использовать assertTrue() , и для нее неважно, как я проверяю вхождения и какие типы данных использую. Правильно?

Попробую обязательно переписать на List, но это другая задача уже.Еще бы надо проверить, что не только нет ничего лишнего, но и есть все нужное, над этим думаю.

2) "Если какая-то не входит, то в моём сгенерированном тесте есть что-то лишнее и тест должен упасть".Должен упасть при первом невхождении или вообще при наличии невхождений?

3) "А в том, как заставить тест упасть".Задать условие, которое при выполнении означает "тест пройден" и при невыполнении означает "тест не пройден".С этой задачей отлично справляется assertTrue(<условие>, <сообщение, если условие вернуло FALSE, то есть когда тест не пройден>)

4) "Попробую обязательно переписать на лист, но это другая задача уже"Ответите на вопросы 1+2 — смогу помочь с осознанием, нужен ли List

5) "Ещё бы надо проверить , что не только нет ничего лишнего, но и есть всё нужное".С этой задачей списки справляются тоже как нельзя лучше!Тут есть два варианта:а) если мы уверены, что хотя бы один список содержит элементы с уникальными значениями, то работает вариант:б) если же мы не уверены, что списки уникальны по множеству элементов (например, множество не уникально, т.к. элемент "1" присутствует дважды, то нужно идти через вычитание одного множества из другого:6) Должен ли упасть тест, если:legalAddress = 123123, Российская Федерация, Респ. Адыгея, Кошехабльский р-н, с. Вольное, ул. Ленина, дом 5testLegalAddress = 123123, Российская Федерация, Респ. Адыгея, с. Вольное, Кошехабльский р-н, ул. Ленина, дом 5 (село и район поменены местами)

📎📎📎📎📎📎📎📎📎📎