Skip to content

Latest commit

 

History

History
197 lines (165 loc) · 10.9 KB

File metadata and controls

197 lines (165 loc) · 10.9 KB

Автотесты для Shafin Multitool

Обзор

Этот проект содержит комплексный набор автотестов для приложения Shafin Multitool, покрывающий основные функциональные области приложения.

Структура тестов

1. ScriptParsingTests.swift

Тесты парсинга сценария (reformatScript) - Критичная логика

  • ✅ Парсинг простого диалога
  • ✅ Парсинг многострочного сценария
  • ✅ Парсинг с несколькими репликами одного персонажа
  • ✅ Обработка пустого сценария
  • ✅ Обработка некорректного формата
  • ✅ Извлечение имен персонажей
  • ✅ Извлечение фраз с правильной пунктуацией
  • ✅ Парсинг сценария с пробелами и переносами строк
  • ✅ Парсинг длинного диалога
  • ✅ Парсинг сценария с запятыми в именах
  • ✅ Парсинг сценария только с именем без фразы
  • ✅ Парсинг сценария с несколькими предложениями в одной реплике

2. SceneSaveLoadTests.swift

Тесты сохранения/загрузки сцен - Целостность данных

  • ✅ Сохранение AR World Map с корректными данными
  • ✅ Загрузка существующей карты
  • ✅ Загрузка несуществующей карты
  • ✅ Сохранение SceneData вместе с картой
  • ✅ Получение списка всех названий сцен
  • ✅ Удаление существующей сцены
  • ✅ Удаление несуществующей сцены
  • ✅ Создание директории для сцен
  • ✅ Сохранение сцены без актеров
  • ✅ Сохранение сцены без сценария
  • ✅ Сохранение актеров с якорями
  • ✅ Целостность данных при множественных сохранениях

3. ConverterTests.swift

Тесты конвертации разрешений и настроек - Часто используемая логика

  • ✅ Преобразование UIColor в CGFloat компоненты
  • ✅ Обработка некорректных цветов
  • ✅ Конвертация разрешения HD (1280x720)
  • ✅ Конвертация разрешения Full HD (1920x1080)
  • ✅ Конвертация разрешения 4K UHD (3840x2160)
  • ✅ Конвертация всех разрешений
  • ✅ Преобразование simd_float4x4 в массив Float
  • ✅ Преобразование массива Float обратно в simd_float4x4
  • ✅ Обработка некорректного размера массива
  • ✅ Обратное преобразование (массив -> матрица -> массив)
  • ✅ Конвертация различных цветов
  • ✅ Конвертация разрешений в цикле

4. SettingsTests.swift

Тесты управления настройками камеры

  • ✅ Переключение разрешения (HD → FHD → UHD → HD)
  • ✅ Переключение FPS (24 → 25 → 30 → 24)
  • ✅ Переключение скорости (0.5 → 0.7 → 1.0 → 1.5 → 0.5)
  • ✅ Изменение ISO через picker view
  • ✅ Изменение баланса белого через picker view
  • ✅ Сохранение настроек в UserDefaults
  • ✅ Получение значений настроек из UserDefaults
  • ✅ Получение заголовков для строк picker view
  • ✅ Получение выбранной строки для текущих настроек
  • ✅ Установка дефолтных значений при первом запуске
  • ✅ Множественные изменения настроек
  • ✅ Сохранение настроек между сессиями

5. ActorManagementTests.swift

Тесты управления актерами

  • ✅ Получение актера по его якорю
  • ✅ Установка случайного цвета актеру
  • ✅ Создание актера с дефолтным именем
  • ✅ Сохранение актера с якорем
  • ✅ Добавление нескольких якорей к актеру
  • ✅ Изменение имени актера
  • ✅ Удаление актера
  • ✅ Конвертация цвета актера в компоненты
  • ✅ Сериализация и десериализация актера
  • ✅ Создание актера с уникальным ID
  • ✅ Поиск актера по имени
  • ✅ Обновление цвета актера

6. UserDefaultsTests.swift

Тесты работы с UserDefaults

  • ✅ Сохранение настроек камеры
  • ✅ Загрузка настроек при следующем запуске
  • ✅ Установка дефолтных значений при первом запуске
  • ✅ Обновление существующих настроек
  • ✅ Сохранение различных значений разрешения
  • ✅ Сохранение различных значений FPS
  • ✅ Сохранение различных значений ISO
  • ✅ Сохранение различных значений баланса белого
  • ✅ Сохранение различных значений скорости
  • ✅ Сохранение всех настроек одновременно
  • ✅ Проверка целостности данных после множественных изменений
  • ✅ Очистка настроек

7. UITests.swift

UI-тесты основного флоу

⚠️ Примечание: UI-тесты требуют добавления accessibility identifiers к элементам интерфейса для полноценной работы.

  • ✅ Открытие приложения и отображение списка сцен
  • ✅ Создание новой сцены
  • ✅ Открытие существующей сцены
  • ✅ Удаление сцены
  • ✅ Отображение AR-вида
  • ✅ Нажатие на кнопку добавления актера
  • ✅ Отображение кнопок управления
  • ✅ Нажатие на кнопку записи
  • ✅ Остановка записи
  • ✅ Открытие picker view для ISO
  • ✅ Выбор значения ISO
  • ✅ Переключение разрешения
  • ✅ Переключение FPS
  • ✅ Открытие экрана редактирования сценария
  • ✅ Ввод текста в текстовое поле сценария
  • ✅ Сохранение изменений сценария
  • ✅ Возврат на экран списка сцен

8. PerformanceTests.swift

Тесты производительности

  • ✅ Парсинг больших сценариев
  • ✅ Парсинг сценария на 1000+ строк (время выполнения < 1 секунды)
  • ✅ Парсинг очень больших сценариев
  • ✅ Сохранение больших AR-карт
  • ✅ Сохранение карты с множеством якорей (время сохранения < 5 секунд)
  • ✅ Загрузка больших AR-карт
  • ✅ Конвертация множества цветов
  • ✅ Конвертация множества разрешений
  • ✅ Сериализация и десериализация больших данных
  • ✅ Получение списка всех сцен (производительность)
  • ✅ Множественные изменения настроек
  • ✅ Поиск актера в большом списке
  • ✅ Обработка кадров в реальном времени (симуляция)
  • ✅ Конвертация матриц в цикле
  • ✅ Отсутствие утечек памяти при длительной записи (симуляция)

Запуск тестов

В Xcode:

  1. Откройте проект shafinMultitool.xcworkspace
  2. Выберите схему shafinMultitoolTests
  3. Нажмите Cmd + U для запуска всех тестов
  4. Или используйте меню Product > Test

Через командную строку:

xcodebuild test -workspace shafinMultitool.xcworkspace -scheme shafinMultitool -destination 'platform=iOS Simulator,name=iPhone 15'

Требования для UI-тестов

Для полноценной работы UI-тестов необходимо добавить accessibility identifiers к элементам интерфейса:

// Примеры:
recordButton.accessibilityIdentifier = "recordButton"
stopButton.accessibilityIdentifier = "stopButton"
addActorButton.accessibilityIdentifier = "addActorButton"
changeISOButton.accessibilityIdentifier = "changeISOButton"
changeFPSButton.accessibilityIdentifier = "changeFPSButton"
changeResolutionButton.accessibilityIdentifier = "changeResolutionButton"
changeScriptButton.accessibilityIdentifier = "changeScriptButton"
backButton.accessibilityIdentifier = "backButton"
stopwatchLabel.accessibilityIdentifier = "stopwatchLabel"

Покрытие тестами

  • Unit тесты: ~150+ тестовых случаев
  • UI тесты: ~17 тестовых случаев
  • Performance тесты: ~15 тестовых случаев

Примечания

  1. Некоторые тесты требуют реального устройства или симулятора с поддержкой ARKit
  2. UI-тесты требуют добавления accessibility identifiers
  3. Тесты производительности могут занимать больше времени
  4. Некоторые тесты создают временные файлы, которые автоматически очищаются в tearDown

Дальнейшее развитие

Рекомендуется добавить:

  • Интеграционные тесты для взаимодействия между модулями
  • Тесты для обработки ошибок и edge cases
  • Тесты для SpeechRecognitionService
  • Тесты для CameraService с моками
  • Расширенные UI-тесты с реальными сценариями использования