Издевательство над модульным тестом iOS с использованием Swifty Mocky
Swift был разработан, чтобы быть безопасным — поддерживать отражение только для чтения. Таким образом, нет возможности изменить вашу программу во время выполнения. В целом все хорошо, код выполняется как положено, и другие компоненты не могут его изменить. Но возвращаясь к нашей теме, все фиктивные фреймворки построены на рефлексии, чтобы иметь возможность изменять классы, типы и объекты во время выполнения.
Этому языку нужны свои супергерои для написания тестируемого кода, и мы их хорошо знаем — протоколы и расширения! Независимо от того, какая это реализация — класс, перечисление или структура — назначение протоколов остается — определять абстракции и добавлять новые функциональные возможности к типам, даже тем, которые мы не обязаны.
Что мы можем сделать, чтобы издеваться?
Используйте метапрограммирование для создания полной фиктивной реализации.
Это множество библиотек, выполняющих фиктивную работу для модульного тестирования, большинство тополей — это Cuckoo и swifyMocky .
В этой статье я дам обзор того, как мы можем сделать насмешку с помощью SwiftyMocky.
SwiftyMocky
https://github.com/MakeAWishFoundation/SwiftyMocky
Преимущества
- Автоматически имитировать протоколы Swift
- Поддержка дженериков
- Простая настройка и легкий вес
- Хорошая документация
- Красивый и простой синтаксис (использующий автозаполнение)
- Отметить протоколы для имитирования
- Каждый протокол в исходных каталогах, имеющий эту аннотацию, будет добавлен в Mock.generated.swift.
- Все макеты имеют данный метод (доступный как метод экземпляра, так и глобальную функцию) с простым в использовании синтаксисом, позволяющим указать, какие должны быть возвращаемые значения для данных методов (на основе указанных атрибутов).
- Все макеты имеют метод проверки (доступный как метод экземпляра, так и глобальную функцию) с простым в использовании синтаксисом, позволяющим проверить, вызывался ли метод в макете и сколько раз. Он также предоставляет удобный способ указать, имеют ли значение атрибуты метода (и какие именно).
- Все макеты имеют метод выполнения (доступный как как метод экземпляра, так и как глобальная функция) с простым в использовании синтаксисом, позволяющим указать закрытие, которое будет выполняться при вызове метода-заглушки.
Настраивать
- Установить с помощью Cocoapods
- Установите CLI для простого создания макетов
> swiftymocky doctor # подтвердите свои настройки
> swiftymocky generate # генерировать макеты
- Генерация макетов основана на файле Mockfile.yml с возможностью исключения правил быстрой проверки с помощью excludeSwiftLintRules .
У нас, как у разработчиков, не так много инструментов для насмешек над Swift, с некоторыми строгими ограничениями из-за языкового ограниченного доступа во время выполнения. И тут мы подошли к критическому вопросу — использовать или не использовать внешние фреймворки для мокинга.
Знаменитый дядя Боб старается не использовать их как можно чаще; он говорит: «Точка, в которой вы начинаете нуждаться в фиктивной среде, — это та самая точка, в которой связь между вашими тестами и кодом становится слишком сильной. Однако после этого вы должны стремиться к тому, чтобы связь между вашим кодом и тестами была достаточно низкой, чтобы вам не приходилось слишком часто использовать фиктивный фреймворк».
Спасибо за чтение! Если вам понравилась эта статья, пожалуйста, хлопните в ладоши, чтобы другие люди тоже могли ее прочитать :)
Удачного кодирования :v: