如何捕获CoreData警告?

时间:2014-04-01 23:32:50

标签: ios core-data tdd bdd nsvaluetransformer

我正在练习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'

如何捕获此警告并使其成为我的测试失败?

1 个答案:

答案 0 :(得分:0)

我不知道您可以捕获该警告。但是,您可以通过执行类似

的操作来测试值转换器的存在
  1. 使用entitiesByName方法获取模型中所有实体的列表。
  2. 在上一步返回的字典中找到此实体的NSEntityDescription
  3. 使用attributesByName获取实体说明的所有属性。
  4. 使用valueTransformerName上的NSAttributeDescription获取使用该值的属性的值转换器类的名称。
  5. 使用NSClassFromString验证值转换器类的存在。
  6. 如果存在值变换器类,则在步骤5中将得到非零结果。

    您还可以将其实现为更通用的检查,以查找所有值变换器以验证所有这些变换器。为此,只需遍历entitiesByName返回的每个实体,然后遍历attributesByName返回的每个属性(而不是按名称查找已知实体和属性)。每当你找到一个值转换器时,检查该类是否存在(并且,我猜它是子类NSValueTransformer)来决定测试是否应该通过。