MockFive 0.03

MockFive 0.03

测试已测试
语言语言 SwiftSwift
许可 MIT
发布时间最后发布时间2016年1月
SPM支持 SPM

Daniel Burbank 维护。



MockFive 安装和使用

pod 'MockFive' 添加到 Podfile 中,或将 MockFive.swiftMockFive 文件夹拖到您的项目中。

使您的模拟对象符合 Mock 协议,并在结构体或类中的任何地方添加 let mockFiveLock = lock()。现在您可以使用 mock() 了!在函数体中调用 mock() 会在 myMockObject.invocations 中记录其调用,并在运行时实现替代实现。

简化手动模拟

使用 MockFive 允许对象报告它们被调用的哪些函数,并允许在运行时进行方法存根。由于 MockFive 使用反射生成其消息,mock() 方法保证了测试字符串始终与生产代码匹配。《Mock》协议可以被结构体模拟和类模拟采用。

示例

协议模拟

import MockFive

struct CustomModel { var id: Int }

protocol MockworthyProtocol {
    func method()
    func complexMethod(arg: Int, model: CustomModel, others: Any?...) -> (Int, String)
}

struct MockImplementation: MockworthyProtocol, Mock {
    let mockFiveLock = lock()

    func method() { stub(identifier: "method") }
    func complexMethod(arg: Int, model: CustomModel, others: Any?...) -> (Int, String) {
        return stub(identifier: "complexMethod", arguments: arg, model.id, others) { (37, "stub string") }
    }
}

var mock = MockImplementation()

// Invocation records
mock.method()
mock.complexMethod(7, model: CustomModel(id: 982), others: 7, nil, 0.23, [0,9]) // (37, "stub string")

mock.invocations[0] // "method()"
mock.invocations[1] // "complexMethod(_: 7, model: 982, others: [Optional(7), nil, Optional(0.23), Optional([0, 9])]) -> (Int, String)"

// Function stubbing
mock.registerStub("complexMethod") { (90, "Total \(42 + 9)") }
mock.complexMethod(9, model: CustomModel(id: 7)) // (90, "Total 51")

类模拟

import MockFive

struct CustomModel { var id: Int }

class MockworthyClass {
    func method() {}
    func complexMethod(arg: Int, model: CustomModel, others: Any?...) -> (Int, String) { return (9, "potatos") }
}

class MockwortheClassMock: MockworthyClass, Mock {
    let mockFiveLock = lock()

    override func method() { stub(identifier: "method") { super.method() } }
    override func complexMethod(arg: Int, model: CustomModel, others: Any?...) -> (Int, String) {
        return stub(identifier: "complexMethod", arguments: arg, model.id, others) { super.complexMethod(arg, model: model, others: others) }
    }
}

// Invocation records
var mock = MockwortheClassMock()
mock.method()
mock.complexMethod(7, model: CustomModel(id: 982), others: 7, nil, 0.23, [0,9]) // (37, "stub string")

mock.invocations[0] // "method()"
mock.invocations[1] // "complexMethod(_: 7, model: 982, others: [Optional(7), nil, Optional(0.23), Optional([0, 9])]) -> (Int, String)"

// Function stubbing
mock.registerStub("complexMethod") { (90, "Total \(42 + 9)") }
mock.complexMethod(9, model: CustomModel(id: 9)) // (90, "Total 51")

在项目中的 TestTrack.playground 中查看更多示例!