gpt4 book ai didi

ios - 符合 Equatable 的单元测试策略

转载 作者:搜寻专家 更新时间:2023-11-01 06:43:21 26 4
gpt4 key购买 nike

假设我有一个 struct 符合我的模型的 Equatable,如下所示:

struct Model: Equatable {
var a: Int = 0
var b: String = ""
}

func ==(lhs: Model, rhs: Model) -> Bool {
return lhs.a == rhs.a && lhs.b == rhs.b
}

现在我为此编写了一些单元测试。像这样的东西:

func testModelsAreEqual() {
let model1 = Model()
let model2 = Model()
XCTAssertEqual(model1, model2)
}

func testModelsAreNotEqual1() {
let model1 = Model()
var model2 = Model()
model2.b = "hello world"
XCTAssertNotEqual(model1, model2)
}

func testModelsAreNotEqual2() {
let model1 = Model()
var model2 = Model()
model2.a = 1
XCTAssertNotEqual(model1, model2)
}

但是我如何编写一个测试来保护我免受另一个属性被添加到 Model 而没有被添加到 == 的成员平等检查的场景喜欢:

struct Model: Equatable {
var a: Int = 0
var b: String = ""
var c: Double = 0
}

func ==(lhs: Model, rhs: Model) -> Bool {
return lhs.a == rhs.a && lhs.b == rhs.b
}

显然,即使从概念上讲我的 Equatable 已损坏,我的测试仍然会全部通过。有没有我可以在这里采用的测试策略来帮助提醒我注意这个问题?我可以用 Swift 的 Mirror 和有限反射做些什么吗?也许 Mirror.children.count?或者谁有更好的建议?

最佳答案

在搜索了其他解决方案之后,我决定使用成员计数的反射来提醒我变化。以下是对上述示例的测试:

func testModelStillHas2Members() {
XCTAssertEqual(Mirror(reflecting: Model()).children.count, 2, "The member count of Model has changed, please check the `==` implementation to ensure all members are accounted for.")
}

关于ios - 符合 Equatable 的单元测试策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33272913/

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