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

【讨论】:

以上是关于如何使用 MVVM 架构编写核心位置并执行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章

win10 uwp MVVM入门

如何快速测试框架中使用的核心数据模型

单元测试2

MVVM 架构中点击事件的位置

如何让单元测试访问核心数据模型

在 MVVM 应用程序中访问核心数据堆栈