Как прервать тест и вернуть ошибку при истинности условия?
Есть тест, в котором проверяется, что все кусочки одной строки входят в другую.
Если же какая-то часть не входит, то тест должен завершиться с ошибкой. Я не понимаю, как это реализовать.
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 (село и район поменены местами)