Similar presentations:
Модуль 2. Урок 2. Безопасность кода_ Nullable типы, проверки и приведения
1.
Основы Kotlin длятестировщиков
Модуль 2. Урок 2: Безопасность кода: Nullable
типы, проверки и приведения
gazprombank.ru
2.
Содержание урока01. Цель урока
3
02. Null (Пустота) — Когда значения нет
5
03. Безопасная работа с Nullable типами
9
04. Явное приведение типов: as и as?
13
05. Проверка типа: is и !is
19
06. Практикум: Обработка реальных сценариев в тестах
22
07. Итог и домашнее задание
38
3.
Цель урокаПонять, что такое null, nullable-тип и non-nullable-тип.
Как безопасно работать с nullalble-типами
Как проверить тип данных и безопасно преобразовать его к
другому типу
О1
4.
Null (Пустота) — Когдазначения нет
О2
5.
Типы данныхСкрытую часть часть и
пользовательские типы
рассмотрим на следующем
и более поздних уроках.
5
6.
Типы данных6
7.
Null (Пустота)Когда значения нет.
Проблема:
Решение в Kotlin:
В большинстве языков обращение к "ничему"
(null-указателю) вызывает исключительные
ситуации (например, NullPointerException)
которые без обработки приводят к
завершению программы.
Null-безопасность (null-safety).
«Ошибка на миллиард» в классическом программировании
«Ошибка на миллиард долларов» — это популяризованное
ученым Чарльзом Э. Хоаром название для пресловутого «null
pointer exception». В большинстве классических языков
программирования переменная, якобы содержащая объект
какого-то класса, на самом деле может ничего не содержать.
Явное разделение типов на non-nullable и
nullable:
Для non-nullable типов обращения к nullуказателю недопустимо.
Предоставление механизмов безопасной
работы с nullable типами.
7
8.
Nullable типыКогда значения может не быть.
Данные типа String
Данные типа String?
8
9.
Nullable типыПримеры ситуаций в тесте и коде теста
Результат поиска элемента на странице:
Применение Nullable типа:
Selenide может вернуть null, если элемент не
найден.
Любая ситуация, когда значение может
отсутствовать.
Опциональное поле в JSON-ответе API:
поле может быть, а может и отсутствовать.
9
10.
Безопасная работа сNullable типами
Механизмы null-безопасности (null-safety) в Kotlin
О3
11.
Безопасная работа с Nullable типамиЯвная проверка
Проверка вручную (if):
Самый простой и понятный способ.
11
12.
Безопасная работа с Nullable типамиЯвная проверка
Безопасный вызов (?. — Safe Call operator):
Если значение null, то весь вызов просто
вернет null без ошибки.
12
13.
Безопасная работа с Nullable типамиЯвная проверка
Оператор Элвиса (?: — Elvis operator):
Позволяет предоставить значение по
умолчанию на случай, если слева оказался null.
13
14.
Явное приведение типов:as и as?
О4
15.
Явное приведение типов: as и as?Проблема:
Решение в Kotlin::
Что если мы привели тип неправильно? Тест
упадет с ошибкой ClassCastException.
Небезопасное приведение (as):
"Я уверен, что это строка!"
Безопасное приведение (as?):
"Попробуй привести к этому типу, а если не
получится — верни null".
15
16.
Небезопасное приведение (as)"Я уверен, что это строка!"
Примеры:
16
17.
Небезопасное приведение (as)"Я уверен, что это строка!"
Примеры:
17
18.
Безопасное приведение (as?)"Попробуй привести к этому типу, а если не получится — верни null".
Примеры:
18
19.
Безопасное приведение (as?)"Попробуй привести к этому типу, а если не получится — верни null".
Примеры:
19
20.
Проверка типа:is и !is
Позволяет проверить, является ли объект экземпляром
определенного типа перед приведением.
О5
21.
Проверка типа: is и !isvar strValue: Any = "Это строка"
var intValue: Any = 1234
// Попробуем безопасно определить её тип
var isStrValueIsString = strValue is String // сохранит значение true
isStrValueIsString = strValue !is String // сохранит значение false
var isIntValueIsString = intValue is String // сохранит значение false
isIntValueIsString = intValue !is String // сохранит значение true
21
22.
Практикум:Обработка реальных
сценариев в тестах
Смоделируем ситуации, которые постоянно возникают в
автоматизации.
О6
23.
Сценарий 1: "Поиск элемента на странице".1
2
24.
Сценарий 1: "Поиск элемента на странице".Шаг 1: Создай новый файл Module2Lesson2Scenario1.kt и добавь в него функцию верхнего уровня main с кодом ниже.
1
2
25.
Сценарий 1: "Поиск элемента на странице".Шаг 1: Создай новый файл Module2Lesson2Scenario1.kt и добавь в него функцию верхнего уровня main с кодом ниже.
1
2
26.
Сценарий 1: "Поиск элемента на странице".Шаг 1: Создай новый файл Module2Lesson2Scenario1.kt и добавь в него функцию верхнего уровня main с кодом ниже.
1
2
27.
3…2…1…Шаг 2: Запускаем код и смотрим на вывод в консоли.
Видим, как безопасно можно выполнить взаимодействие с элементом страницы.
3
4
Null безопасность
27
28.
Сценарий 2: "Анализ ответа от API".Шаг 3: Создай новый файл Module2Lesson2Scenario2.kt и добавь в него функцию верхнего уровня main с кодом ниже.
5
6
29.
Сценарий 2: "Анализ ответа от API".Шаг 3: Создай новый файл Module2Lesson2Scenario2.kt и добавь в него функцию верхнего уровня main с кодом ниже.
5
6
30.
Сценарий 2: "Анализ ответа от API".Шаг 3: Создай новый файл Module2Lesson2Scenario2.kt и добавь в него функцию верхнего уровня main с кодом ниже.
5
6
31.
Сценарий 2: "Анализ ответа от API".Шаг 3: Создай новый файл Module2Lesson2Scenario2.kt и добавь в него функцию верхнего уровня main с кодом ниже.
5
6
32.
Сценарий 2: "Анализ ответа от API".Шаг 3: Создай новый файл Module2Lesson2Scenario2.kt и добавь в него функцию верхнего уровня main с кодом ниже.
5
6
33.
Сценарий 2: "Анализ ответа от API".Шаг 3: Создай новый файл Module2Lesson2Scenario2.kt и добавь в него функцию верхнего уровня main с кодом ниже.
5
6
34.
Сценарий 2: "Анализ ответа от API".Шаг 3: Создай новый файл Module2Lesson2Scenario2.kt и добавь в него функцию верхнего уровня main с кодом ниже.
5
6
35.
Сценарий 2: "Анализ ответа от API".Шаг 3: Создай новый файл Module2Lesson2Scenario2.kt и добавь в него функцию верхнего уровня main с кодом ниже.
5
6
36.
3…2…1…Шаг 4: Запускаем код и смотрим на вывод в консоли.
Видим, как безопасно можно проанализировать ответ от API.
7
8
36
37.
Сценарий 2: "Анализ ответа от API".Шаг 5: Перезапусти сценарий изменяя значение переменной apiResponse на 400,потом null.
И убедись, что сценарий успешно обрабатывает ответы API без падений.
9
10
11
12
38.
Итог и домашнее заданиеРезюмируем и закрепляем
О7
39.
Мы узналиОператоры ?., ?: и проверка if
Null
— это нормальная ситуация "значение отсутствует", а не
всегда ошибка.
— наши главные инструменты для безопасной работы с
потенциально пустыми значениями.
Nullable типы (?)
as? и is
инструмент Kotlin для явного указания, что переменная
может быть пустой.
нужны для безопасного приведения типов, когда мы не
уверены на 100%, что за объект нам вернула система.
Null безопасность
Приведение и проверка типов
39
40.
Домашнее заданиеЗадача 1
Задача 3*
Напишите функцию
fun simulateElementSearch(searchId: Int): String?
которая возвращает:
• "Элемент №$searchId" для searchId > 0.
• null для любого другого searchId.
Смоделируйте ответ от сервера:
val serverResponse = arrayOf("error", 404):
Задача 2
Используя is и as?, проверьте, является ли второй
элемент списка числом.
Если да, напечатайте "Код ошибки: <число>".
Если нет, напечатайте "Неизвестный код ошибки".
В функции main вызовите simulateElementSearch с разными
аргументами (например, 2 и -5).
Используйте оператор Элвиса ?:, чтобы вывести
"Элемент не найден" в случае null.
Null безопасность
Приведение и проверка типов
40
41.
Спасибо за внимание!gazprombank.ru