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

标签 ios swift swift2

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

相关文章:

ios - 无法为 UITextField 链接 IBOutlet

ios - 如何在当前位置绘制图钉注释,MapKit,Swift,iOS10

ios - 协议(protocol)扩展编译器错误中的 Swift 2.2 #selector

ios - Swift 2.0 中的 NSFileManager fileExistsAtPath?

ios - 如何使用 NSMutableArray 进行排序?

ios - Swift 异步图像加载器

ios - Pushwoosh 远程通知

ios - 隐藏大写锁定图标 Xamarin iOS

ios - 向 UITableView 发送自定义 TableViewCell 操作

ios - swift : Extra argument 'error' in call