1.31M

Модуль 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 и !is
var 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
English     Русский Правила