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

pu3pd22g  于 2023-10-21  发布在  iOS
关注(0)|答案(2)|浏览(117)

我有一个移动CLPlacemark对象并使用它们的应用程序,我想对与它们交互的几个组件进行单元测试。为此,我希望能够使用生成具有已知值的mock CLPlacemark s的方法,从MapKit中消除对真实的反向地理位置的调用。
CLPlacemark只有一个初始化器(复制初始化器)。但在文档中,它说:
Placemark对象通常由CLGeocoder对象生成,但您也可以自己显式创建它们。
然而,大多数成员都是只读的,所以我不确定如何创建一个自定义值。在Swift中可以这样设置内部属性吗?如果没有,任何想法,他们的意思是在上述引文?

j91ykkif

j91ykkif1#

我将使用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);
bjp0bcyl

bjp0bcyl2#

这里有些考古学的东西,但这里有一个可行的答案,因为我只是有这个需要

public static func mock(coordinate: CLLocationCoordinate2D, name: String) -> CLPlacemark {
        let mkPlacemark = MKPlacemark(
            coordinate: coordinate,
            addressDictionary: ["name": name]
        )
        return CLPlacemark(placemark: mkPlacemark)
    }

使用方法:

let placemark = CLPlacemark.mock(
    coordinate: CLLocation(latitude: 0, longitude: 0), name: "mock-name"
)

相关问题