2017-12-14 33 views
0

私は計装テストケースにエスプレッソを使用しています。Androidインストルメンテーションテスト - パッケージ構造のベストプラクティス

enter image description here

何私が知りたいのですがandroidTest(計装テストパッケージは)同じ階層に従うべきである:私は私の生産のソースコードについては、以下の画像に類似した構造を持っていますか?どのようなメリットがありますか?インストルメンテーションテストのために同じ階層を守らなければ、スケーラビリティの問題や一般的な問題につながるでしょうか?今、私は生産ソースコードのようなものではない計測器テストフォルダを作成しましたが、すべてが動作しますが、開発者がパッケージを整列させたままにしているブログを見ました。明らかに、ユニットテストでは、パッケージとマッチするのは理にかなっていますが、計測テストではそれほど確かではないので、私はそれらを同じに保ちます。

+0

ですから、ライトにMyClassのためのテストをしたい、あなたのテストとしばらくの間、異なる構造を使用したいですテストに「theTest」という名前をつけています。複雑になると、テストのテストMyClassを覚えています。スペックは最終的に変更されます、それはいつもして、次のサッカーはどんなテストテストをテストするか知っています。 MyClassTestを使用してMyClassをテストするなど、テストクラスに「テスト」を追加することで、物事を整理して同じ構造を維持するのに役立ちます。 Google "Abbot and Costello Who's on first" – Pomagranite

+0

私のプロジェクトは白いラベルのプロジェクトです。少なくとも3つの異なるプロジェクトに変更されます。一部の顧客にとっては青いプロジェクト、他の顧客は赤いプロジェクト、別のカスタムはオレンジのプロジェクトです。場所に基づいてプロジェクトが変更されます。これはなぜ私がさまざまなバリエーションをテストする必要がある構造を与えるのは難しいです。何を示唆していますか? – j2emanue

+0

もし私があなたを理解していれば、gradleの味のようなサウンドはこの種の問題を解決します。https://stackoverflow.com/questions/16737006/using-build-flavors-structuring-source-folders-and-build-gradle-correctly有料バージョン、無料バージョン、または場所ベースのフレーバー。私はkepingディレクトリ構造の一貫性を推奨し、クラス名は "test"や "unitTest"の例を追加するかもしれない。MyClassTest – Pomagranite

答えて

1

計測用テストは、提供されているアプリケーションなどの特定の機能を実現するために連携して動作するさまざまなアプリケーションコンポーネントをテストすることです。これは高レベルの概要なので、特定の高レベル機能電子メールフィールドに無効な電子メールフォーマットを入力するなど、その機能に関するより詳細なテストが含まれているはずです。だから、個人的に私は、次のような構造の計測テストの思うだろう:

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を実行すると、すべてのバリアント(testandroidTestのいずれか)に対応するディレクトリ構造が得られます。詳細については、このリンクを参照してください:Configure Build Variants。また、テストをビルド中に@RuleJUnitにチェックアウトすることを忘れないでください。最終ラップまで、上記ほとんどを説明するための良いコードラボの例へのリンクとして

Android Testing Codelab

関連する問題