我正在练习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'
如何捕获此警告并使其成为测试失败?
你能捕捉到这个警告。不过,您可以通过执行以下操作来测试价值转换器的存在。
- 使用
entitiesByName
方法从模型中获取所有实体的列表。 - 在上一步返回的字典中查找此实体的
NSEntityDescription
。 - 使用
attributesByName
获取实体说明上的所有属性。
在 - 使用它的属性上获取值转换器类的名称,在
NSAttributeDescription
上使用valueTransformerName
。 - 使用
NSClassFromString
验证值转换器类是否存在。
如果值转换器类存在,您将在步骤 5 中获得非 nil 结果。
您还可以将其实现为更通用的检查,查找所有价值转换器以验证所有值转换器。为此,只需循环访问 entitiesByName
返回的每个实体,然后遍历 attributesByName
返回的每个属性(而不是按名称查找已知实体和属性)。每当你找到一个价值转换器时,检查这个类是否存在(我猜,它NSValueTransformer
子类),以确定测试是否应该通过。