среда, 23 января 2019 г.

Expected «null», but was «null» в автотестах

Как мне нравится, когда автотесты падают на null и пробелах))) Первый раз при отладке такого теста ты вообще не понимаешь, что не так. Потом запоминаешь...

Собрала несколько любимых примеров из жизни, зацените:


Null

Допустим, должна быть пустая строка, а ты туда текстом null вписал. Тест падает:

expected «null», but was «null»

Угадай, что не так ¯\_(ツ)_/¯




Как можно так ошибиться и впечатать null? У меня был такой кейс:

  • Исходные файлы в экселе — входной и выходной.
  • После прогона теста система формирует собственный эталон в формате csv.
  • Система сравнивает твой выходной файл и тот, что сама получила.
  • Система выводит все несопавшие значения.
Самый простой путь написать новый тест, в котором много значений на выходе — накидать основные колонки, а потом запустить тест. Проверить системный эталон «глазками», и, если он хороший, скопировать значения в свой тест.



Системный эталон формируется автоматически и в пустые ячейки вписывает null. Так что если копируешь оттуда — не забудь потом почистить эти ячейки. Или огребешь сообщение, подобное сообщению выше.

Помню, как я в первый раз удивилась этому сообщению. Долго думала, что не так, потом обнаружила, что из одной ячейки не удалила текст «null»  ¯\_(ツ)_/¯



Пробелы


Тут я тоже очень удивилась, увидев падение теста:

1: Case failed!
Expected:  [3/]:AAYADH Abou  
  Actual:  [3/]:AAYADH Abou

Потом присмотрелась к полному выводу результатов, и увидела пробелы после «Abou  »:

Input data:  AAYADH;Abou;;;;;;
Etalon data: AL;13130;AAYADH Abou    ;;;;;;;
Result data: AL;13130;AAYADH Abou;;;;;;;;

Ок, пару раз огребла, запомнила. Когда делаешь копипасту в эксель — проверяй, что не вставил в конец лишний пробел. Видишь такую ошибку — ищи пробелы. Не нашел? Посмотри в полном выводе результатов, нагляднее будет.

А потом столкнулась с таким кейсом

Test 4: Case failed!
Expected:  [1/src_external_id]:2. пустой
 Actual:  [1/src_external_id]:2. пустой

Может, опять пробел в конце? Стойте, они же одинаковые!

Input data:  2. пустой;AL;;;;;
Etalon data: 2. пустой;AL;;;;;
Result data: 2. пустой;AL;;;;;

Вот вообще одинаковые же, ну! В чем проблема то? Долго думала как ее исправить, потом просто скопировала значение, которое ожидает тест — все заработало!

В общем, если ставить цифру в точкой или длинное тире («2 — пустой»), то выходные данные проще скопировать с эталона от теста. Видимо, эксель видит нумерацию и ставит какой-то свой пробел, как в нумерованном списке. И он не совпадает с пробелом в CSV...


Один символ

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

И в итоге получаешь что-то такое:

Expected:  [1/Исх. строка]:Harkovskay 3. korpus1. Kvartira-1 644041
  Actual:  [1/Исх. строка]:Harkovskay 3. korpus1. kvartira-1 644041


Нашли отличие? Оно, конечно, не так уж сложно. А если сложно, можно использовать программу типа Araxis Merge, это решит все проблемы.

Но обычно ты просто смотришь в командной строке вывод результатов прогона и пытаешься сам оценить «Оно упало, потому что я тест криво сделал или баг заводить пора?». 

И если строка длинная, то разницу в одну букву заметить сложно. Привыкаешь же к быстрому чтению, окидываешь результаты взглядом — одинаковое же! Ан нет (。•́︿•̀。)

Комментариев нет:

Отправить комментарий