コールバックを使用します。インタラクタからプレゼンタまで、プレゼンタをテストするのが難しくなります。
プレゼンターが入力(Interactorから送信されたもの)を処理する方法をテストする際には、プレゼンターがインタラクターに電話をかけるメソッドが呼び出されなければなりません。データをプレゼンターに送信します。
プレゼンターは、インターアクターによって定義されたプロトコルを実装したことで、あなたのテストはちょうど直接プレゼンターに適切な入力メソッドを呼び出すことができます。
は限りプロトコルを宣言するように、私はモックの役割ではなく、オブジェクト(http://www.jmock.org/oopsla2004.pdf)のスタイルでTDDを実践します。プロトコルは、オブジェクトの役割(その役割)に焦点を当てることにより、より良い抽象化を提供するのではなく、その役割をどのようにするかを支援します。
プロトコルは、単体テストではそれほど価値がありません。ユニットテストでは、テスト対象システムの依存関係のテストダブル(http://martinfowler.com/bliki/TestDouble.html)が提供されます。依存関係を具象クラスとして公開しても、テスト用のテストダブルを作成できます。
Objective-Cでは、OCMock(http://ocmock.org)、OCMockito(https://github.com/jonreid/OCMockito)などのモッキングライブラリを使用して、具象クラスのスタブ、スパイ、またはモックを作成できます。
Swiftでは、依存関係として使用されている具体的なクラスをそれぞれサブクラス化することで、テストダブルを作成できます。要するに
、プロトコルは、ユニットテストを容易にするために使用されていないが、アプリケーションが何をするか、抽象度の高い記述します。ここ
は事後有益であった抽象プロトコルを有する方法の例である:
Iは、例えば、ユーザが画面上で実行できるアクションを表すためのプロトコルを作成しましたProfileUserActions
などのアクションがあり、changeName
、changeAddress
などのアクションがありました。プレゼンターはProfileUserActions
を実装し、ビューはProfileUserActions
を依存として受け入れました。ユーザーが画面上のボタンをタップすると、ビューは適切なメッセージをuserActions
オブジェクトに送信します。
アナリティクスを追加したいときは、ProfileUserActions
も実装した新しい独立したProfileAnalytics
クラスを作成することができました。ビューとプレゼンターの間にアナリティクスオブジェクトを挿入しました。ビューやプレゼンターのいずれかを変更することなく、アナリティクスをキャプチャできるようになりました。
詳細な返信をありがとうございます。私はプロトコルの目的をクリアしました。私はUNITテストとまだ少し混乱しています:)それについては申し訳ありません。サンプルコードは私に良い画像を与えることができるかもしれない – MaK
Gotcha!ごめんなさい:-)あなたのユニットテストはいつ書くのですか?あなたがコードを書く前に、例えば。 TDD?またはコードが書かれた後? –
実際、私はバイパーモデルで構築された既存のコードベースのユニットテストを書く必要があります - BDDを使う計画。そして、私は実際にTDD対BDDにもう1つの質問を投稿しました:) http://stackoverflow.com/questions/41264111/tdd-vs-bdd-rest-service – MaK