我目前正在为我遇到的错误编写测试,其中生产代码中的调用顺序不正确,导致潜在的竞争条件。
使用XCTest检查测试代码中调用顺序的最简洁方法是什么?
在OCMock / Objective-C中,根据this question,我们有setExpectationOrderMatters
。但是由于动态/静态语言差异,我不知道XCTest / Swift中可用的类似功能。
答案 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])