我試圖將單元測試添加到現有的iOS應用程序,其中使用OCMock
。OCMock:存根@dynamic屬性
在這個應用程序中,我們有一堆CoreData實體和生成的類。這些類顯然包含@dynamic
屬性。
我試圖存根這些屬性之一如下:
self.event = [OCMockObject mockForClass:[ACEvent class]];
[[[self.event stub] andReturn:@"e46e1555-d866-4160-9b42-36d0fb9c29cd"] eventGUID];
的一點是,這是行不通的。顯然,因爲@dynamic
屬性默認沒有實現,所以在這種情況下依賴於CoreData來提供它。我結束了一個NSError:
-[NSProxy doesNotRecognizeSelector:eventGUID] called!
我已經看到了這個地方已經解決了通過抽象CoreData實體的協議(OCMock with Core Data dynamic properties problem)背後的其他問題。但是由於這是一個現有的代碼庫,我沒有這個選項,因爲我不能重構所有的東西。
任何人都可以提供另一種解決方案嗎?
編輯: 作爲一個方面說明,我剛剛找到了解決方案,但我擔心它不能在所有情況下工作。 我所做的是爲測試目標中的這些方法提供一個樣本空實現。它的工作原理,但我擔心它可能會打破依賴CoreData工作的其他測試。對此有何看法?
在一個類別使用空方法應該工作。 OCMock需要實現的原因是必須弄清楚方法簽名是什麼。一旦知道存根應該工作。 也許我們可以添加一些東西,讓OCMock假定一個沒有參數的方法和一個id返回類型,如果它在模擬類中找不到方法的話。雖然這看起來有點脆弱。 –