2014-04-01 119 views
0

我正在練習BDD。我有一個名爲Foobar的實體,其中包含一個名爲quux的可變形屬性,我已經指定(使用核心數據模型編輯器)爲QuuxToBazTransformer。關鍵是,QuuxToBazTransformer不存在。核心數據應該失敗我的測試,並告訴我我需要實現它。如何捕獲CoreData警告?

出人意料的是,測試通過了:我Foobar似乎已被存儲和核心數據只是告訴我,作爲一個警告

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

我怎麼能抓住這個警告,使我的測試失敗?

回答

0

我不知道你可以捕捉到這個警告。你可以做這樣的事情

  1. 從模型中獲取所有實體的列表,使用entitiesByName方法測試值變壓器的存在,不過,。
  2. 在上一步返回的字典中查找該實體的NSEntityDescription
  3. 使用attributesByName獲取實體描述的所有屬性。
  4. NSAttributeDescription上使用valueTransformerName獲取使用它的屬性上的值轉換器類的名稱。使用NSClassFromString驗證值轉換器類的存在。

如果該值變壓器類存在,你會得到在步驟非無所獲5.

你也可以實現這個作爲一個更一般的檢查,以查找所有值的變壓器驗證他們全部。爲此,只需遍歷entitiesByName返回的每個實體,然後遍歷attributesByName返回的每個屬性(而不是按名稱查找已知實體和屬性)。任何時候你找到一個值轉換器,檢查這個類是否存在(並且,我想它是它的子類NSValueTransformer)來決定測試是否應該通過。

相關問題