計測用テストは、提供されているアプリケーションなどの特定の機能を実現するために連携して動作するさまざまなアプリケーションコンポーネントをテストすることです。これは高レベルの概要なので、特定の高レベル機能電子メールフィールドに無効な電子メールフォーマットを入力するなど、その機能に関するより詳細なテストが含まれているはずです。だから、個人的に私は、次のような構造の計測テストの思うだろう:
androidTest
\--- java
\--- com.example.myapp
+--- login
| +--- LoginTest (Class, Scenario 1 of high level feature, ex: already signed up login)
| | +--- valid_email_login (method)
| | +--- invalid_email_login (method)
| | \--- no_internet_connection (method)
| \--- AnotherLoginTest (Class, Scenario 2 of high level feature, ex: create new account login)
| \--- test_for_scenario_2 (method)
\--- another_high_level_feature (and so on...)
テストが容易に理解し、コードの変更などに基づいて構築または変更することができるこの方法。
単体テストでは、LoginPresenter
のようなアプリケーションの1つ(つまり、いわゆるユニット)コンポーネントでテストが行われます。通常、テストはコンポーネントの必要なすべての依存関係をモックアップし(おそらくMockito
または他の種類の模擬注入を使用して)、コンポーネントがロジックごとに正しく動作することを確認します。ベストプラクティスでは、単体テストにはContext
のようなデバイス/エミュレータやアクティビティに依存する依存関係は必要ないので、ローカルマシン(PC)で単体テストを実行するには、例のMVPのようなアーキテクチャが必要な理由がありますまたはラップトップ)。しかし、これは、androidTest
フォルダ内で、特にNFCやGPSなどのハードウェア関連のコンポーネントテスト用のデバイスやエミュレータが必要なコンポーネントをテストする場合に、ユニットテストを作成することを止めるものではありません。
Soその場合には、私は個人的にこのようなものに終わるだろう:あなたのアプリがで構成さの異なる変形に関して
src
+--- androidTest
| |--- java
| \--- com.example.myapp
| +--- unit
| \--- (unit\component related tests that need device\emulator go here)
| \--- instrumentation (components working together related tests go here)
| +--- login
| | +--- LoginTest (Class, Scenario 1 of high level feature, ex: already signed up login)
| | | +--- valid_email_login (method)
| | | +--- invalid_email_login (method)
| | | \--- no_internet_connection (method)
| | \--- AnotherLoginTest (Class, Scenario 2 of high level feature, ex: create new account login)
| | \--- test_for_scenario_2 (method)
| \--- another_high_level_feature (and so on...)
\--- test
|--- java
\--- com.example.myapp (unit\component related tests that don't need device\emulator go under here)
+--- presenters
| +--- LoginPresenterTest
| | +--- view_loading (method)
| | +--- disable_views_when_loading (method)
| | \--- another_unit_test (method)
| \--- AnotherPresenterTest
\--- models (and so on...)
、アンドロイドのGradleプラグインバリアント依存テストを配置する場所を把握するためのコマンドを提供します。単にプロジェクトのルートディレクトリにgradlew :app:sourceSets
を実行すると、すべてのバリアント(test
、androidTest
のいずれか)に対応するディレクトリ構造が得られます。詳細については、このリンクを参照してください:Configure Build Variants。また、テストをビルド中に@Rule
をJUnit
にチェックアウトすることを忘れないでください。最終ラップまで、上記ほとんどを説明するための良いコードラボの例へのリンクとして
:Android Testing Codelab
ですから、ライトにMyClassのためのテストをしたい、あなたのテストとしばらくの間、異なる構造を使用したいですテストに「theTest」という名前をつけています。複雑になると、テストのテストMyClassを覚えています。スペックは最終的に変更されます、それはいつもして、次のサッカーはどんなテストテストをテストするか知っています。 MyClassTestを使用してMyClassをテストするなど、テストクラスに「テスト」を追加することで、物事を整理して同じ構造を維持するのに役立ちます。 Google "Abbot and Costello Who's on first" – Pomagranite
私のプロジェクトは白いラベルのプロジェクトです。少なくとも3つの異なるプロジェクトに変更されます。一部の顧客にとっては青いプロジェクト、他の顧客は赤いプロジェクト、別のカスタムはオレンジのプロジェクトです。場所に基づいてプロジェクトが変更されます。これはなぜ私がさまざまなバリエーションをテストする必要がある構造を与えるのは難しいです。何を示唆していますか? – j2emanue
もし私があなたを理解していれば、gradleの味のようなサウンドはこの種の問題を解決します。https://stackoverflow.com/questions/16737006/using-build-flavors-structuring-source-folders-and-build-gradle-correctly有料バージョン、無料バージョン、または場所ベースのフレーバー。私はkepingディレクトリ構造の一貫性を推奨し、クラス名は "test"や "unitTest"の例を追加するかもしれない。MyClassTest – Pomagranite