0

我正在练习 BDD。我有一个名为的实体Foobar,它包含一个名为 的可转换属性quux,我已将其指定(使用 Core Data 模型编辑器)为QuuxToBazTransformer. 重点是,QuuxToBazTransformer不存在。Core Data 应该无法通过我的测试并告诉我需要实现它。

令人惊讶的是,测试通过了:我的Foobar似乎已经被存储了,Core Data 只告诉我一个警告

xctest[99290:303] CoreData: warning: no NSValueTransformer with class name
'QuuxToBazTransformer' was found for attribute 'quux' on entity 'Foobar'

如何捕获此警告并使其测试失败?

4

1 回答 1

0

我不知道您是否可以捕获该警告。但是,您可以通过执行类似的操作来测试值转换器的存在

  1. entitiesByName使用该方法从您的模型中获取所有实体的列表。
  2. 在上一步返回的字典中查找NSEntityDescription此实体的 。
  3. 使用 . 获取实体描述上的所有属性attributesByName
  4. valueTransformerName使用on获取使用它的属性上的值转换器类的名称NSAttributeDescription
  5. 用于NSClassFromString验证值转换器类的存在。

如果值转换器类存在,您将在步骤 5 中得到非零结果。

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

于 2014-04-02T01:14:05.210 回答