【发布时间】:2017-03-29 05:43:07
【问题描述】:
我正在寻找有关测试 swift 对象相等性的良好做法的建议
如果我有一个具有许多属性的复杂对象,很容易错过相等的实现。
执行平等实施的良好做法是什么?
更多详情: 当然,您可以编写测试来检查两个值是否应该相等,但这里的问题是这很容易破坏。 您的项目中有一个结构,六个月后,另一个开发人员向该结构添加了一个属性。 假设他忘记将属性添加到等式中。相等性仍然有效,测试通过,但只有该属性更改时,您的应用程序才会中断。我的问题是,有办法避免这个问题吗?
在一个非平凡的应用程序中很容易最终拥有具有 10 个值的模型对象,并使用嵌套的模型对象。那么我怎样才能控制我的模型对象的平等呢?如何降低平等实施中的人为错误风险?
可能的解决方案: 我想到的一个解决方案是编写一个脚本,查看符合特定协议的类和结构的编译时间
Diffable : Equatable {}
对于所有采用Diffable 的类/结构,我将检查是否存在测试文件,即:
对于Foo的课程,我会寻找一个测试课程Foo_Tests_Diffable
对于Foo 中的所有属性,我将检查是否存在符合以下名称模式的测试函数
test<property name>Diffable
即:
class Foo : Diffable {
var title: String
var color: UIColor
var tag: Tag
}
我将在Foo_Tests_Diffable 中检查以下测试
func testTitleDiffable {
// Test
}
func testColorDiffable {
// Test
}
func testTagDiffable {
// Test
}
如果所有脚本都找到所有预期的测试而不是编译步骤通过,否则失败
但是这个解决方案很耗时,我不知道我是否能够实现它,所以欢迎任何建议
【问题讨论】:
-
嗯,这就是你添加测试的原因,对吧? ;) 如果在所有字段都相等时应将其视为相等,则将其声明为
struct是一个好习惯。 -
当然,您可以编写测试来检查两个值是否应该相等,但这里的问题是这很容易破坏。您的项目中有一个结构,六个月后,另一个开发人员向该结构添加了一个属性。假设他忘记将属性添加到等式中。相等性仍然有效,测试通过,但只有该属性更改时,您的应用程序才会中断。我的问题是,有没有办法避免这个问题?
-
请扩展您的问题标题和正文以考虑您的评论。出于某种原因,这些 cmets 对我来说是隐藏的,我写了一个对你没什么用的答案。
-
谢谢您的回复
标签: ios swift equality nsobject value-type