1

最近、いくつかの (ロジック) 単体テストをコードに追加しようとしています。Kiwiでテストをセットアップしました。BDD スタイルと構文が気に入っています。

私の問題はCLLocationManager、正しい送信に依存するコードをテストしようとしていることですlocationManager:didUpdateToLocation:fromLocation:CLLocationManagerただし、テストを実行すると、おそらく承認されていないと考えられるため、これは決して起こりません。記録のために、テスト ターゲットに.gpxファイルを追加し、そのファイルを場所として使用するようにスキームを編集しました ([スキームの編集... ] -> [テスト] -> [情報] の下)。シミュレーターで完全なアプリを実行すると、同じコードが正常に機能します。テスト ケースで送信される (シミュレートされた) 場所の更新を取得する方法はありますか?

4

2 に答える 2

4

依存性注入を使用して、使用するロケーション マネージャーを指定します。次のいずれかを実行できます。

  • イニシャライザへの引数として指定(コンストラクタインジェクション)
  • プロパティとして設定する (setter インジェクション)

可能であれば、コンストラクター注入を使用してみてください。

次に、実際に使用するために、実際の CLLocationManager を渡します。ただし、テスト用には、事前設定されたテスト引数を使用して、目的のメソッドを送信するようにトリガーできる偽物を提供します。これにより、実際の場所への参照が削除されるため、テストが決定論的になります。

于 2013-02-06T03:44:27.127 に答える
1

最終的には別の方法に行き着きました。ロジック テストをアプリケーション テストに変換して、テストがシミュレーターでアプリと一緒に実際に実行されるようにしました。[NSBundle mainBundle]これには、アプリとまったく同じように取得しCLLocationManagerて作業するために面倒なことをする必要がないという決定的な利点があります。別のロジック テストの概念的なクリーンさを好みましたが、そのためだけにコードを書き直すことは意味がないと思います。

于 2013-02-06T12:35:34.397 に答える