3

ユニット テストに「偽の」ストアを使用すると問題が発生します。フレームワーク フォルダーをプロジェクトに追加し、Xcode の既定のテスト ケースを Kiwi テストに置き換えることで、Kiwi をインストールしました。これらはすべて正常に動作します。

Core Data を使用しているため、「偽の」ストアを作成する必要があるため、実際のデータベースで遊んでいます。これを行うための基本的なガイドとしてhttp://www.cimgf.com/2012/05/15/unit-testing-with-core-data/を使用しました。

ただし、Xcode のデフォルトのテスト実装はアプリの起動後にテストを実行するため、私の '[MagicalRecord setupCoreDataStackWithStoreNamed:@"Store.sqlite"]' は、テストが実行される前に App Delegate 内で起動されます。

テストが '[MagicalRecord setupCoreDataStackWithInMemoryStore]' を使用しようとするまでに、この sqlite ストアがセットアップされているため、インメモリ ストアはセットアップされません (私の知る限り)。スタックは既に存在し、存在する場合は何も実行せずに戻るだけなので、sqlite データベースのままになります。

私が知る限り、これには次のオプションがあります。

  1. テストケース用にいくつかの環境変数またはフラグを入れ、アプリデリゲートでこれらをチェックし、この変数に応じて適切なストアを作成します(つまり、テストのために実際のコードを微調整します-きれいではなく、TDDを実践する人には推奨されません/BDDers)。
  2. すべてのコントローラーにマネージド コンテキスト プロパティを追加して、使用するストアを手動で指定できるようにします (MagicalRecord シングルトン アクセス パターンの優れた機能を大幅に削除します)。
  3. 私の実際のデータベースで(注意深く)遊んでください(私はこれを熟考するつもりはありません)。

これらはどれも特に良い解決策ではないようです。そのため、私が愚かにも見落としていたより良い解決策を誰かが見つけてくれることを願っています。

4

1 に答える 1

2

テストでアプリ デリゲートを起動しないでください。参照する記事で提案されているように、テストのみがインメモリ コア データ ストアをセットアップするようにテストをセットアップしてみてください。

于 2013-04-12T17:09:13.487 に答える