如何用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;这样,您以后可以通过创建符合 LocationServiceLocationServiceMock class 来模拟位置服务的每个功能;在您的单元测试中,您将使用模拟服务创建一个视图模型。