[解決済み] Google Espresso または Robotium [終了しました]。
質問
私は自動化されたUIテストツールを使用する必要があり、RobotiumとGoogle Espressoのどちらを使用するか迷っています。
この 2 つの主な違いは何ですか?一方に存在し、他方には存在しない機能はありますか?
どのように解決するのですか?
全文公開:私はEspressoの著者の一人です。
Espresso と Robotium はどちらもインスツルメンテーションベースのフレームワークです。 Android インストルメンテーション を使用して、テスト中のアクティビティを検査し、対話します。
Google では、純正のインストルメンテーションよりも便利だったため、Robotium を使用して開始しました(Robotium の開発者に敬意を表します)。しかし、Robotium では、テスト中のアクティビティと対話できるようにするフレームワークに対する私たちのニーズを満たすことはできませんでした。 信頼性の高い テスト 簡単 を開発者に提供します。
EspressoのRobotiumに対する主な進歩。
-
同期。デフォルトでは、インスツルメンテーション テスト ロジックは、UI 操作 (UI スレッドで処理) とは別の (インスツルメンテーション) スレッドで実行されます。テスト操作と UI の更新を同期させないと、テストが不安定になりやすくなります (つまり、タイミングの問題でランダムに失敗します)。ほとんどのテスト作成者はこの事実を無視し、あるものはスリープ/リトライ機構を追加し、さらに少数のものはより洗練されたスレッドセーフコードを実装しています。どれも理想的ではありません。Espresso は、テストアクションとアサーションをテスト中のアプリケーションの UI とシームレスに同期させることで、スレッドセーフを実現しています。Robotium はスリープ/リトライ機構でこれに対処しようとしますが、これは信頼性が低いだけでなく、必要以上にテストの実行を遅くする原因になります。
-
API。Espressoは小さく、よく定義され、予測可能なAPIを持っており、カスタマイズにも開放されています。フレームワークに、UI要素を見つける方法を伝えるには、標準的な ハムクレストマッチャー を使って UI 要素の位置を特定し、アクションを実行するか、ターゲット要素でアサーションをチェックするように指示します。これは、テスト作成者が30以上のクリックメソッドから選択することを期待されるRobotiumのAPIと対照的です。さらに、Robotium は getCurrentActivity (電流の意味は?) や getView のような危険なメソッドを公開しており、メインスレッドの外のオブジェクトで操作することができます (上記のポイントを参照してください)。
-
明確な障害情報。Espressoは、失敗が起こったときに豊富なデバッグ情報を提供するように努めています。さらに、独自の失敗ハンドラを使って、Espressoが失敗を処理する方法をカスタマイズすることができます。しばらく試していませんが、以前のバージョンの Robotium は一貫性のない失敗処理に悩まされていました(たとえば、clickOnView メソッドが SecurityExceptions を飲み込んでしまうなど)。
以前の回答とは異なり、Espresso はかなりの数のユーザーを持つすべての API バージョンでサポートされています(参照。 http://developer.android.com/about/dashboards/index.html ). 古いバージョンでも動作しますが、それらをテストするのはリソースの無駄遣いでしょう。テストについて言えば... Espressoは、Googleが開発したアンドロイドアプリケーションの大部分と同様に、包括的なテストスイート(95%以上のカバレッジ)により、すべての変更についてテストされています。
関連
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] match_parentとfill_parentの違いは何ですか?
-
[解決済み] アプリケーションを終了することは嫌われますか?
-
[解決済み] AndroidでstartActivityForResultを管理する方法
-
[解決済み] 新しいAndroid Fragmentをインスタンス化するためのベストプラクティス
-
[解決済み] なぜフラグメントなのか、そしてアクティビティの代わりにフラグメントを使用するのはどんなときか?
-
[解決済み】google-services.jsonで異なるproductFlavorsを指定する場合
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] ViewPager2でスワイプを無効にするには?
-
[解決済み] エスプレッソ: Thread.sleep( )
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] RecyclerView.Stateを使って、RecyclerViewのスクロール位置を保存するには?
-
[解決済み] Eclipseでのandroid:configChangesでのAdmobエラー
-
[解決済み] AppCompat-v7 21でアクションバー/ツールバーにアイコンを表示する。
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] Androidのadb logcatでTAG名で特定のメッセージを除外する方法は?
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] WhatsAppでメッセージを送信する
-
[解決済み] <string> XMLで改行やタブを作るには(eclipse/android)?