如何用MVVM架构编写核心位置并进行单元测试?
How do I write a core location with MVVM architecture and perform unit testing?
我想开发一个应用程序来获取设备位置并按区域搜索附近。我对 MVVM 体系结构有基本的了解,但到目前为止我找不到将核心位置逻辑分离到视图模型中的方法。我也想为此编写示例单元测试用例。
您可以创建一个 LocationService
协议来定义所有方法(例如 fetchCurrentPosition
)。
然后创建一个符合该协议的具体class,实现苹果CoreLocation
服务;例如,这个 class 将被视图模型使用,并将注入到初始化程序中。想想这样的事情:
class MyViewModel {
let locationService: LocationService
init(locationService: LocationService = LocationServiceImpl()) {
self.locationService = locationService
}
}
LocationServiceImpl
是符合LocationService
实际使用苹果CoreLocation
的class;这样,您以后可以通过创建符合 LocationService
的 LocationServiceMock
class 来模拟位置服务的每个功能;在您的单元测试中,您将使用模拟服务创建一个视图模型。
我想开发一个应用程序来获取设备位置并按区域搜索附近。我对 MVVM 体系结构有基本的了解,但到目前为止我找不到将核心位置逻辑分离到视图模型中的方法。我也想为此编写示例单元测试用例。
您可以创建一个 LocationService
协议来定义所有方法(例如 fetchCurrentPosition
)。
然后创建一个符合该协议的具体class,实现苹果CoreLocation
服务;例如,这个 class 将被视图模型使用,并将注入到初始化程序中。想想这样的事情:
class MyViewModel {
let locationService: LocationService
init(locationService: LocationService = LocationServiceImpl()) {
self.locationService = locationService
}
}
LocationServiceImpl
是符合LocationService
实际使用苹果CoreLocation
的class;这样,您以后可以通过创建符合 LocationService
的 LocationServiceMock
class 来模拟位置服务的每个功能;在您的单元测试中,您将使用模拟服务创建一个视图模型。