私はテスト駆動開発について多くのことを読んでおり、小さなプロジェクトでそれを実行したいと決めました。参考までに、私は現在、「テストによって導かれる成長するオブジェクト指向ソフトウェア」を読んでいます。Mac(Cocoa)アプリケーションのエンドツーエンドテストを作成するにはどうすればよいですか?
私はアプリケーションの単体テスト方法と、UIの特定の部分を単体テストする方法を理解していますが、私はエンドツーエンドのテストを設定するのに苦労しています。たとえば、アプリケーション全体の特定のパスが正しい出力を生成することをテストします(これはエンドツーエンドテストの基本的な理解です)。
クリックイベントをシミュレートする必要はありませんが、UIに何らかの並べ替えが必要です。
「Logic」テスト(アプリケーションを起動せずにテストする)、「アプリケーション」テスト(アプリケーションを起動してテストする)、GHUnitなどの非同期機能を組み合わせる必要があると思いますか?
EDIT:
以下の答えのいくつかを読んだ後、私は機能的なエンド・ツー・エンドのテストを探していますように聞こえるが、私はそれを想像すると、私はテストの例を与えるべきだと思います。
- アプリケーションを起動します。
- テストユーザーの資格情報でlogin関数を呼び出します。 (注:必ずしもUIオートメーションが必要というわけではありません)。
- ウィンドウのラベルに「ログイン中...」と表示されていることを確認します。
- ユーザーが正常に確認されたら、ラベルに「Welcome、Adam!」と表示されていることを確認します。
KIFはUI要素の変更を確認するステップがあり、Mac OSXブランチのように見えるので、うまくいくように聞こえます。私は、一定の時間が経過した後、いつも予想していた変更やタイムアウトのためにUIを常にポーリングする小さなクラスを書くこともできると確信していますが、これが正しいかどうかは疑問です。
しかし、おそらく、私は「成長するオブジェクト指向ソフトウェア、ガイド付きテスト」で読んでいるものをそのままココアにそのまま適用しようとしています。
別のUPDATE:
だから私は、これまでのアドバイスを読んでいる、にリンクされている様々な場所をチェックし、まだ本を参照しながら、何かを実装するために始めました。私が実際にやろうとしているのはTest-駆動 - 開発部品です。その本の中で最も際立っていたのは、受け入れテストで最初にユーザーの観点から何が起こりたかったのかを記述したことでした。
メソッドの作成を開始したらすぐにソリッドユニットテストが必要になることを認識していますが、いくつかのUIを使用していくつかの高水準の受入れテストを先に書くことに熱心でした。 GHAsyncTestCaseのアイデアに似たメソッドを使って、私自身のアプリケーション "ドライバ"クラスを作成し始めました。これは正しいか、有用か、必要なのですか?
これまでのすべてのコメントを本当に感謝しています。私は何をしようとしているのか、そこにさまざまなテストがあるのか、自分の頭の中でうまくやっています。私はすぐにこの質問を終わらせます、それはかなり大きくなっているので、最終的なアドバイスは大歓迎です!
大きな質問です! – logancautrell