2016-04-15 9 views
-1

私は問題があり、試行錯誤とグーグルとスタックオーバーフローの数時間後に解決策を知らない。モック初期viewController - コードのカバレッジの結果

私はビューコントローラを持っています。私はオブジェクトごとに依存性注入を渡したいと思います。このオブジェクトはプロトコルから派生します。一般に、ユニットテストをセットアップすることは問題ではありません。また、模擬作業や単体テストが実行されています。それで問題はどこですか?

私の主なターゲットでは1つのクラスのみをテストしています。このクラスは、View Controllerとはまったく関係ありません。しかし、コードカバレッジはビューコントローラをカバーするのにまともな価値を示しています。しばらくすると、 "テスト"ボタンを押すと、 "実行"ボタンを押すようにプロジェクトが実行されることがわかりました。そのため、View Controllerが初期化されて作成され、最初に別の依存関係を渡す機会はありません。

私は、実際のオブジェクトを1つのケースに渡し、他のケースでは擬似オブジェクトを渡すために、テスト実行と実際の実行を区別する方法が必要です。

私の質問は、どうしたらいいですか?なぜ誰もこの問題を抱えていないのだろうか。私はコードカバレッジツールを提供しているのですが、私がそれらをテストしていなくてもメソッドがカバーされていることがわかっている場合に意味します。

私がテストしてい唯一のクラス:

The one and only class that I am testing

そして、これらは、カバレッジ結果(Xcodeのスクリーンショット時のフォーカスを失ったため、バーがそうでなければ、彼らは青であるだけで灰色です。。)は次のとおりです。

enter image description here

だから私は結果に、私は他のすべてをテストしていない午前だけでクラスを対象と見て期待していました。なぜこの問題が続くのか分かります。 View Controllerには依存関係があり、この依存関係は初期化された後にいくつかのクラスなどを作成します。私がしたいのは、ユニットテスト中に偽のオブジェクトを渡すことと、実際の実行中に実際のオブジェクトを渡すことです。 Visual Studioで非UIテストが動作するのと同じように:テストが実行されると、アプリケーションは起動しません。テストランナーはテスト対象を初期化するだけで、それだけです。これがiOS単体テストのために達成したいことです。私はsthを逃したと思います。非常に重要:(

答えて

0

同じ問題を抱えている、または同じ問題を抱えている私たちにとっては解決策は、テスト実行の環境変数を指定することです。テスト実行中に "InTestMode"という環境変数を作成し、値を "1"に設定したと仮定した場合:

 let dict = NSProcessInfo.processInfo().environment 

     if let env = dict["InTestMode"] as? String? 
     { 
      return env == "1" 
     } 

     return false 
関連する問題