你如何在Swift中模拟一个对象?
镜像协议听起来有希望,但它现在做的不多。
到目前为止,我发现的唯一的办法是子类和覆盖所有的模拟类的方法。这当然不是一个真正的模拟,远离理想,很多工作。
任何其他想法?
为什么不是OCMock?
从source:
Can I use OCMock using the language bridge functionality?
Yes,but
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:
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类被调用。可以手动添加这个,但自动添加是很好的。