微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单元测试 – 嘲笑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类被调用。可以手动添加这个,但自动添加是很好的。

原文地址:https://www.jb51.cc/swift/321331.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐