gpt4 book ai didi

swift - 测试多个方法调用顺序

转载 作者:可可西里 更新时间:2023-11-01 00:28:24 25 4
gpt4 key购买 nike

我有 3 个与特定类相关的方法,定义如下:

class MyClass: NSObject {
func myMethod() {
methodA()
methodB()
methodC()
}
func methodA() {}
func methodB() {}
func methodC() {}
}

我需要测试 myMethod 是否按实现顺序调用了所有 3 个方法:methodA 然后是 methodB 然后是 methodC 为了使用 XCode 单元测试进行测试,无论这些方法的实现如何,我都在测试用例中创建了一个子类,如下所示:

class ChildClass: MyClass {
var method1CallingDate: Date?
var method2CallingDate: Date?
var method3CallingDate: Date?

override func methodA() {
super.methodA()
method1CallingDate = Date()
}
override func methodB() {
super.methodB()
method2CallingDate = Date()
}
override func methodC() {
super.methodC()
method3CallingDate = Date()
}
}

现在在测试方法中,我首先调用这 3 个方法,然后我首先断言所有三个日期都不为 nil,然后像这样比较它们:

XCTAssertLessThan(method1CallingDate, method2CallingDate)
XCTAssertLessThan(method2CallingDate, method3CallingDate)

我遇到的问题是测试有时成功有时失败,我猜是由于 Date 对象在两个方法调用之间(随机地)相同。有没有更好的方法来测试调用多个方法的顺序?

附注这很容易在 Android SDK org.mockito.Mockito.inOrder

中完成

最佳答案

首先,制作一个记录订单的模拟对象。没有日期,没有字符串。只是一个枚举。

class MockMyClass: MyClass {
enum invocation {
case methodA
case methodB
case methodC
}
private var invocations: [invocation] = []

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

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

override func methodC() {
invocations.append(.methodC)
}

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, .methodC])

没有异步等待。调用简单。清除失败消息。

关于swift - 测试多个方法调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54573124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com