单元测试 – 嘲笑Swift

你如何在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类被调用。可以手动添加这个,但自动添加是很好的。

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...