使用自定义值创建 CLPlacemark 以进行测试

Posted

技术标签:

【中文标题】使用自定义值创建 CLPlacemark 以进行测试【英文标题】:Creating CLPlacemark with custom values for testing 【发布时间】:2016-04-13 21:09:22 【问题描述】:

我有一个应用程序可以移动CLPlacemark 对象并使用它们,我想对与它们交互的几个组件进行单元测试。为此,我希望能够使用生成具有已知值的模拟 CLPlacemarks 的方法,将 MapKit 对真正反向地理定位的调用存根。

CLPlacemark 只有一个初始化器(复制初始化器)。但在documentation 中,它说:

地标对象通常由 CLGeocoder 对象生成,但您也可以自己显式创建它们。

但是,大多数成员都是只读的,所以我不确定如何使用自定义值创建一个。是否可以在 Swift 中以这种方式设置内部属性?如果不是,您对上述引文中的含义有何想法?

【问题讨论】:

【参考方案1】:

我会使用 OCMock (http://ocmock.org) 存根创建存根 CLPlacemark 对象的调用,并用您自己的值存根它们的 getter 方法。

id userDefaultsMock = OCMClassMock([CLPlacemark class]);

// set it up to return a specific value when stringForKey: is called
OCMStub([userDefaultsMock property]).andReturn(customValue);

【讨论】:

感谢您的建议。我一直在避免使用 OCMock,因为它是严格按照 ObjcC 设计的,但我敢打赌,我可以找到自己的方式(即子类或其他东西)来删除属性 getter。

以上是关于使用自定义值创建 CLPlacemark 以进行测试的主要内容,如果未能解决你的问题,请参考以下文章

CLPlacemark 的“名称”

流明自定义验证

Swift 中的 CLPlacemark 崩溃

从人类可读的字符串创建 MKPlacemark/CLPlacemark

linux 下 使用cronolog对Tomcat 输出catalina.out 日志按照自定义日期格式进行切割 亲测可用

Wordpress:以正确的语言获取自定义字段值 (WPML)