如何捕获核心数据警告



我正在练习BDD。我有一个名为 Foobar 的实体,其中包含一个名为 quux 的可转换属性,我已将其指定(使用核心数据模型编辑器)为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. 使用 entitiesByName 方法从模型中获取所有实体的列表。
  2. 在上一步返回的字典中查找此实体的NSEntityDescription
  3. 使用 attributesByName 获取实体说明上的所有属性。
  4. 使用它的属性上获取值转换器类的名称,在 NSAttributeDescription 上使用 valueTransformerName
  5. 使用 NSClassFromString 验证值转换器类是否存在。

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

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

相关内容

最新更新