2011-11-01 18 views
15

私はテスト駆動開発について多くのことを読んでおり、小さなプロジェクトでそれを実行したいと決めました。参考までに、私は現在、「テストによって導かれる成長するオブジェクト指向ソフトウェア」を読んでいます。Mac(Cocoa)アプリケーションのエンドツーエンドテストを作成するにはどうすればよいですか?

私はアプリケーションの単体テスト方法と、UIの特定の部分を単体テストする方法を理解していますが、私はエンドツーエンドのテストを設定するのに苦労しています。たとえば、アプリケーション全体の特定のパスが正しい出力を生成することをテストします(これはエンドツーエンドテストの基本的な理解です)。

クリックイベントをシミュレートする必要はありませんが、UIに何らかの並べ替えが必要です。

「Logic」テスト(アプリケーションを起動せずにテストする)、「アプリケーション」テスト(アプリケーションを起動してテストする)、GHUnitなどの非同期機能を組み合わせる必要があると思いますか?

EDIT:

以下の答えのいくつかを読んだ後、私は機能的なエンド・ツー・エンドのテストを探していますように聞こえるが、私はそれを想像すると、私はテストの例を与えるべきだと思います。

  1. アプリケーションを起動します。
  2. テストユーザーの資格情報でlogin関数を呼び出します。 (注:必ずしもUIオートメーションが必要というわけではありません)。
  3. ウィンドウのラベルに「ログイン中...」と表示されていることを確認します。
  4. ユーザーが正常に確認されたら、ラベルに「Welcome、Adam!」と表示されていることを確認します。

KIFはUI要素の変更を確認するステップがあり、Mac OSXブランチのように見えるので、うまくいくように聞こえます。私は、一定の時間が経過した後、いつも予想していた変更やタイムアウトのためにUIを常にポーリングする小さなクラスを書くこともできると確信していますが、これが正しいかどうかは疑問です。

しかし、おそらく、私は「成長するオブジェクト指向ソフトウェア、ガイド付きテスト」で読んでいるものをそのままココアにそのまま適用しようとしています。

別のUPDATE:

だから私は、これまでのアドバイスを読んでいる、にリンクされている様々な場所をチェックし、まだ本を参照しながら、何かを実装するために始めました。私が実際にやろうとしているのはTest-駆動 - 開発部品です。その本の中で最も際立っていたのは、受け入れテストで最初にユーザーの観点から何が起こりたかったのかを記述したことでした。

メソッドの作成を開始したらすぐにソリッドユニットテストが必要になることを認識していますが、いくつかのUIを使用していくつかの高水準の受入れテストを先に書くことに熱心でした。 GHAsyncTestCaseのアイデアに似たメソッドを使って、私自身のアプリケーション "ドライバ"クラスを作成し始めました。これは正しいか、有用か、必要なのですか?

これまでのすべてのコメントを本当に感謝しています。私は何をしようとしているのか、そこにさまざまなテストがあるのか​​、自分の頭の中でうまくやっています。私はすぐにこの質問を終わらせます、それはかなり大きくなっているので、最終的なアドバイスは大歓迎です!

+1

大きな質問です! – logancautrell

答えて

3

「成長するオブジェクト指向ソフトウェア」から得た重要なことは、できるだけUIから切り離すことでした。コードを見なければ、提案をするのは難しいですが、リビジョンでは、UIから「ラベルを確認してください」というビットを分離すると思います。このメッセージを設定しているのは何ですか?そのイベントをテストするだけですか?

UIから切り離すことができればするほど、他のフレームワークやUI要素のドライバを統合するのではなく、単体テスト(迅速かつ簡単に)できるようになります。

+0

私はこのデカップリングメッセージを取得しましたが、いくつかの主要なエンドツーエンドのテストには、「このアクションを実行した後にラベルにこれを確認してください」などのものがありました。私もこのことに夢中になっていますか?しかし、はい、おそらく私はUIからデカップリングにもっと取り組むべきです。 – Adam

+0

テストの作成を開始してテスト駆動開発を開始した後、実際にUIをテストする必要がほんのわずかなケースに限られていることに気付きました。ほとんどの場合、UIをデカップリングしてモックを使用することができます。このスレッドのすべての答えがわかりましたが、あなたのことは私が最終的に発見したものに最も近いものでした。 – Adam

0

アクセシビリティ機能を使用してUIをスクリプト化することができます。WWDC 2011のビデオで、「Macアクセシビリティをシンプルにするデザインパターン」というタイトルのものをチェックします。彼らは2010年も同様のことをしました。

+0

そのビデオ機能とアクセシビリティ機能は役立ちますが、CocoaとXcodeに関連して、私が理解しようとしている完全なエンドツーエンドエクスペリエンスについては十分にカバーしていません。私はまた、ユーザーの相互作用をシミュレートすることは、エンドツーエンドのテスト(実際にはわかっている)では必要ないと述べました。 – Adam

0

@Normanへのあなたの回答に基づいて、機能的なエンドツーエンドとUIベースのエンドツーエンドの両方の推奨事項を探していますオートメーションフレームワークはあなたの心を変えますか? FoneMonkeyなどの侵入何かが役に立つかもしれません: http://www.gorillalogic.com/fonemonkey

それがあなたのために動作しない場合、私はあなたがコードベースの機能テスト対のテストを駆動し、このようなUIに感じるものを「ギャップ」なぜ&を知ることに興味があるだろうか?

+0

ありがとうございました。あなたが言及した「ギャップ」について少し混乱するかもしれないと思うので、私は質問を改善しようとしました。 FoneMoneyはKIFに似ていますが、Mac版では言及されませんでした。 – Adam

1

あなたは広場のKIFフレームワークに興味があるかもしれない:http://corner.squareup.com/2011/07/ios-integration-testing.html

それは、統合/ UIテストのために本当にクールに見えます。

+0

ありがとう、それは非常に面白く見えるし、Mac OSX専用のブランチがあるようにも見えます。ちょうどその場合、私は私の質問に少しの説明を加えました。 – Adam

関連する問題