验证Swift / XCTest中方法调用的顺序

时间:2017-12-01 08:32:33

标签: swift tdd xctest

我目前正在为我遇到的错误编写测试,其中生产代码中的调用顺序不正确,导致潜在的竞争条件。

使用XCTest检查测试代码中调用顺序的最简洁方法是什么?

在OCMock / Objective-C中,根据this question,我们有setExpectationOrderMatters。但是由于动态/静态语言差异,我不知道XCTest / Swift中可用的类似功能。

1 个答案:

答案 0 :(得分:1)

假设我们想要模仿这个协议:

protocol Thing {
    func methodA()
    func methodB()
}

这是一个不仅记录单个方法的调用计数的模拟。它记录了调用顺序:

class MockThing: Thing {
    enum invocation {
        case methodA
        case methodB
    }
    private var invocations: [invocation] = []

    func methodA() {
        invocations.append(.methodA)
    }

    func methodB() {
        invocations.append(.methodB)
    }

    func verify(expectedInvocations: [invocation], file: StaticString = #file, line: UInt = #line) {
        if invocations != expectedInvocations {
            XCTFail("Expected \(expectedInvocations) but got \(invocations)", file: file, line: line)
        }
    }
}

这支持测试断言,如:

mock.verify(expectedInvocations: [.methodA, .methodB])
相关问题