我想开发一个应用程序来获取设备位置并按区域搜索。我对MVVM架构有基本的了解,但到目前为止我找不到将核心位置逻辑分离到视图模型的方法。我也想写相同的样本单元测试用例。
您可以创建一个定义所有方法的LocationService
协议(例如fetchCurrentPosition
)。然后创建一个符合该协议的具体类,它实现了apple CoreLocation
服务;例如,视图模型将使用此类,它将在初始化程序中注入。想想像:
class MyViewModel {
let locationService: LocationService
init(locationService: LocationService = LocationServiceImpl()) {
self.locationService = locationService
}
}
LocationServiceImpl
是符合LocationService
的类,实际上使用苹果CoreLocation
;通过这种方式,您可以稍后通过创建符合LocationServiceMock
的LocationService
类来模拟您的位置服务的每个功能;在单元测试中,您将使用模拟服务创建视图模型。