如何使用 MVVM 架构编写核心位置并执行单元测试?
Posted
技术标签:
【中文标题】如何使用 MVVM 架构编写核心位置并执行单元测试?【英文标题】:How do I write a core location with MVVM architecture and perform unit testing? 【发布时间】:2019-04-15 09:09:01 【问题描述】:我想开发一个应用程序来获取设备位置并搜索附近的区域。我对 MVVM 架构有基本的了解,但到目前为止,我还没有找到将核心位置逻辑分离到视图模型中的方法。我也想为此编写示例单元测试用例。
【问题讨论】:
如果您正在为附近的地方调用自定义 API,那么您可以通过远程 API 调用的一个位置坐标对其进行测试。如果您使用 Google SDK for API,那么您不必像通常 Google SDK 在内部那样编写单元测试。您的位置管理器应该处理(用户权限和获取用户当前位置),您的视图模型只需要使用管理器,这样您就可以为视图模型和位置管理器编写单独的单元测试。 【参考方案1】:您可以创建一个定义所有方法的LocationService
协议(例如fetchCurrentPosition
)。
然后创建一个符合该协议的具体类,实现苹果CoreLocation
服务;例如,这个类将被视图模型使用,并将被注入到初始化程序中。想一想:
class MyViewModel
let locationService: LocationService
init(locationService: LocationService = LocationServiceImpl())
self.locationService = locationService
LocationServiceImpl
是真正使用苹果CoreLocation
的符合LocationService
的类;这样,您以后可以通过创建符合LocationService
的LocationServiceMock
类来模拟定位服务的每个功能;在您的单元测试中,您将使用模拟服务创建一个视图模型。
【讨论】:
以上是关于如何使用 MVVM 架构编写核心位置并执行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章