#ios #swift #iphone #unit-testing #core-location
#iOS #swift #iPhone #модульное тестирование #расположение ядра
Вопрос:
Я хочу разработать приложение для определения местоположения устройства и поиска по близлежащим областям. У меня есть базовое представление об архитектуре MVVM, но до сих пор я не мог найти способ разделить логику расположения ядра на модели представления . Я также хочу написать примеры модульных тестов для того же.
Комментарии:
1. Если вы вызываете свой пользовательский API для близлежащих мест, вы можете протестировать его, передав координаты одного местоположения для вашего удаленного вызова API. Если вы используете Google SDK для API, вам не нужно писать модульный тест, поскольку обычно Google SDK делает это внутренне. Ваш менеджер местоположений должен обрабатывать (разрешение пользователя и получение текущего местоположения пользователя), а ваша модель представления просто должна использовать manager, чтобы вы могли написать отдельный модульный тест для вашей модели представления и диспетчера местоположений.
Ответ №1:
Вы могли бы создать LocationService
протокол, который определяет все методы (например fetchCurrentPosition
). Затем создайте конкретный класс, соответствующий этому протоколу, который реализует CoreLocation
службы Apple; этот класс будет использоваться, например, моделью представления, и он будет введен в инициализатор. Подумайте что-то вроде:
class MyViewModel {
let locationService: LocationService
init(locationService: LocationService = LocationServiceImpl()) {
self.locationService = locationService
}
}
LocationServiceImpl
соответствует ли класс LocationService
тому, который на самом деле использует apple CoreLocation
; таким образом, вы можете позже имитировать каждую функцию вашей службы определения местоположения, создав, например LocationServiceMock
, класс, который соответствует LocationService
; в ваших модульных тестах вы создадите модель представления с имитируемым сервисом.