假设我有一个 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/