如何在Swift中模拟对象?Mirror协议(protocol)听起来很有前途,但目前还没有做很多事情。
到目前为止,我发现的唯一方法是继承并覆盖模拟类的所有方法。当然,这不是一个真正的模拟,离理想还差很多,而且工作量很大。
还有其他想法吗?
为什么不选择OCMock?
source:

已知限制:

  • 测试必须用Objective-C编写
  • 应该被模拟的对象必须继承自NSObject
  • 没有存根/期待/验证类方法
  • 最佳答案

    NSHipster涉及Swift中的语言功能,从而使外部模拟库的必要性降低:


    func testFetchRequestWithMockedManagedObjectContext() {
        class MockNSManagedObjectContext: NSManagedObjectContext {
            override func executeFetchRequest(request: NSFetchRequest!, error: AutoreleasingUnsafePointer<NSError?>) -> [AnyObject]! {
                return [["name": "Johnny Appleseed", "email": "[email protected]"]]
            }
        }
    
        ...
    }
    

    在本地范围内创建外部依赖项的子类的能力以及添加XCTestExpectation的能力解决了许多与OCMock相同的问题。

    诸如OCMock之类的库提供的一件事非常有用,即其“验证”方法可确保调用模拟类。可以手动添加,但是自动添加是不错的选择。

    08-27 17:40