你如何在Swift中模拟一个对象?
镜像协议听起来有希望,但它现在做的不多。
到目前为止,我发现的唯一的办法是子类和覆盖所有的模拟类的方法。这当然不是一个真正的模拟,远离理想,很多工作。
任何其他想法?
为什么不是OCMock?
从source:
Can I use OCMock using the language bridge functionality?
Yes,but
@H_301_19@
with limitations. If you are brave. As of now this is highly
experimental. There’s no guarantee that OCMock will ever fully support
Swift.已知限制:
>测试必须用Objective-C编写
>应该被嘲笑的对象必须从NSObject继承
>没有stubbing /期望/验证类方法
NSHipster触及Swift中的语言特性,这使得外部模拟库不那么必要:
In Swift,classes can be declared within the definition of a function,allowing for mock objects to be extremely self-contained. Just declare a mock inner-class,override and [sic] necessary methods:
@H_301_19@func testFetchRequestWithMockedManagedObjectContext() { class MockNSManagedObjectContext: NSManagedObjectContext { override func executeFetchRequest(request: NSFetchRequest!,error: AutoreleasingUnsafePointer<NSError?>) -> [AnyObject]! { return [["name": "Johnny Appleseed","email": "johnny@apple.com"]] } } ... }在本地范围中创建一个外部依赖的子类的能力加上XCTestExpectation解决了很多与OCMock相同的问题。
OCMock提供的一个非常有用的库是“verify”方法,以确保mock类被调用。可以手动添加这个,但自动添加是很好的。