2013-04-12 59 views
3

我在使用'假'商店進行單元測試時遇到了問題。 我已經安裝了Kiwi,將其框架文件夾添加到我的項目中,並用Kiwi測試替換了Xcode的默認測試用例。這些都運行良好。用獼猴桃,核心數據和魔法記錄進行單元測試

由於我使用的是核心數據,我需要創建一個'假'商店,所以我在玩真正的數據庫。我用http://www.cimgf.com/2012/05/15/unit-testing-with-core-data/作爲我的基本指南來做到這一點。但是,由於Xcode的默認測試實現在啓動應用程序後運行測試,因此在任何測試運行之前,我的'[MagicalRecord setupCoreDataStackWithStoreNamed:@「Store.sqlite」]'仍然在App Delegate內部被觸發。

在測試嘗試使用'[MagicalRecord setupCoreDataStackWithInMemoryStore]'時,此sqlite存儲設置完成,所以內存存儲沒有設置(AFAIK),因爲上述設置堆棧方法檢查首先看看一個堆棧是否已經存在,並且如果它沒有執行任何東西就返回,所以我最終還是使用了sqlite數據庫。

據我所知,這給我留下了以下選項:

  1. 把一些環境變量或標誌中的測試用例,並檢查這些在應用程序的委託,創建相應的商店取決於這個變量(即爲了測試而調整我的實際代碼 - 並不漂亮,也不由任何實踐的TDD/BDDers推薦)。
  2. 在我的所有控制器上添加託管上下文屬性,以便我可以手動指定要使用的存儲(移除MagicalRecord單例訪問模式的大量優點)。
  3. 與我的實際數據庫(仔細)玩(我真的不想甚至想到這一點)。

這些似乎都不是一個特別好的解決方案,所以我希望有人能看到我愚蠢地忽略的更好的解決方案。

回答

2

您的測試不應該啓動應用程序委託。按照您參考的文章中的建議,嘗試設置您的測試,以便只有測試設置內存核心數據存儲。

+0

我得出了同樣的結論,但是這阻止了我測試UI。目前,我在測試時使用了一些標誌離開數據庫,但我正在轉向[Reactive Cocoa](https://github.com/ReactiveCocoa/ReactiveCocoa),這將消除我對UI測試的需求,並且當我這樣做時,我會阻止它啓動委託。 – pseudological