我正在练习BDD。我有一个名为Foobar
的实体,它包含一个名为quux
的可转换属性,我已将其指定(使用Core Data模型编辑器)为QuuxToBazTransformer
。关键是,QuuxToBazTransformer
不存在。核心数据应该无法通过测试,并告诉我需要实现它。
令人惊讶的是,测试通过了:我的Foobar
似乎已存储,Core Data仅告诉我警告:
xctest[99290:303] CoreData: warning: no NSValueTransformer with class name
'QuuxToBazTransformer' was found for attribute 'quux' on entity 'Foobar'
如何捕获此警告并使其成为我的测试失败?
答案 0 :(得分:0)
我不知道您可以捕获该警告。但是,您可以通过执行类似
的操作来测试值转换器的存在entitiesByName
方法获取模型中所有实体的列表。NSEntityDescription
。attributesByName
获取实体说明的所有属性。valueTransformerName
上的NSAttributeDescription
获取使用该值的属性的值转换器类的名称。NSClassFromString
验证值转换器类的存在。如果存在值变换器类,则在步骤5中将得到非零结果。
您还可以将其实现为更通用的检查,以查找所有值变换器以验证所有这些变换器。为此,只需遍历entitiesByName
返回的每个实体,然后遍历attributesByName
返回的每个属性(而不是按名称查找已知实体和属性)。每当你找到一个值转换器时,检查该类是否存在(并且,我猜它是子类NSValueTransformer
)来决定测试是否应该通过。