2017-05-11 7 views
1

単体テストでいくつかのクラスをテストするために、私はCoredataというモックを書きました。プロダクションアプリでProcessInfo.processInfo.environmentを使用するのはどれほど危険ですか?

私はDatabaseManagerというクラスからNSManagedObjectContextという約10のクラスを持っています。ユニットテストが実行されているかどうかを判断しましたが、Coredata NSManagedObjectContextを処理せず、Mock CoredataクラスにリダイレクトしてNSManagedObjectContextを取得してください。

func getContext() -> NSManagedObjectContext { 
    if ProcessInfo.processInfo.environment["XCTestConfigurationFilePath"] == nil 
    { 
     return persistentContainer.viewContext 
    } 
    else 
    { 
     return MockDatabaseController.instance.managedObjectContext() 
    } 
} 

これは単体テストとデバッグで、またアドホックを使って配布した場合でもうまく動作します。

しかし私の懸念は、ProcessInfo.processInfo.environment["XCTestConfigurationFilePath"]から正しい値を得ることができない場合、おそらく役に立たないでしょう。

生産コードでProcessInfo.processInfo.environment["XCTestConfigurationFilePath"]を使用するにはどうすればよいですか?

+0

あなたのアプリのリポジトリ(env varsを含む)の外部に依存することは頭痛になるので、もしあれば避けたいと思います。 – Alexander

+0

それでは、coredataの問題をどうやって解決しますか?私は単体テストを実際のcoredataの文脈とやりとりしたくない。 –

+1

あなたのモックについて何か知ることは、このクラスの仕事ではありません。コアデータサービス(モックまたはリアル)に依存するコードは、依存関係をイニシャライザのパラメータとして使用する必要があります。テストコードはモックを提供するのに対して、プロードコードは実際の実装を提供します。 – Alexander

答えて

2

ビルド引数で渡された-Dフラグとともに、Swift条件付きコンパイルを使用して、コードがテスト環境でのみ有効であり、実稼働環境に移行する機会がなかったことを確認します。

関連する問題