web-dev-qa-db-ja.com

Google EspressoまたはRobotium

自動化されたUIテストツールを使用する必要があり、RobotiumとGoogle Espressoの使用を混同しています。

2つの主な違いは何ですか?一方には存在するが他方には存在しない機能はありますか?

114
Androidme

完全な開示:私はエスプレッソの著者の一人です。

EspressoとRobotiumはどちらも計測ベースのフレームワークです。つまり、 Android Instrumentation を使用して、テスト中のアクティビティを検査および操作します。

Googleでは、ストックインスツルメンテーションよりも便利であるため、Robotiumを使用することから始めました(Robotiumの開発者はそうするのが嫌です)。ただし、開発者にとって信頼性の高いテストeasyを作成するフレームワークの必要性を満たしていませんでした。

Robotiumに対するEspressoの大きな進歩:

  1. 同期。デフォルトでは、インストルメンテーションテストロジックは、UI操作(UIスレッドで処理)とは異なる(インストルメンテーション)スレッドで実行されます。テスト操作とUI更新を同期しないと、テストが不安定になりやすくなります。つまり、タイミングの問題のためにランダムに失敗します。ほとんどのテスト作成者はこの事実を無視し、スリープ/再試行メカニズムを追加し、さらに洗練されたスレッドセーフコードを実装するものはさらに少なくなります。これらはどれも理想的ではありません。 Espressoは、テストアクションとアサーションをテスト中のアプリケーションのUIとシームレスに同期することにより、スレッドセーフを処理します。 Robotiumは、スリープ/リトライメカニズムでこれに対処しようとします。これは、信頼性が低いだけでなく、テストの実行が必要以上に遅くなる原因にもなります。

  2. API。 Espressoには、小さく、明確に定義された予測可能なAPIがあり、カスタマイズが可能です。標準の hamcrest matchers を使用してフレームワークにUI要素を見つける方法を指示し、ターゲット要素でアクションを実行するかアサーションをチェックするように指示します。これは、テスト作成者が30種類以上のクリック方法から選択することが期待されるRobotiumのAPIと比較できます。さらに、RobotiumはgetCurrentActivity(currentはどういう意味ですか?)やgetViewなどの危険なメソッドを公開します。これにより、メインスレッドの外側のオブジェクトを操作できます(上記のポイントを参照)。

  3. 障害情報を消去します。エスプレッソは、障害発生時に豊富なデバッグ情報を提供するよう努めています。さらに、独自の障害ハンドラーを使用して、Espressoで障害を処理する方法をカスタマイズできます。しばらく試していませんが、以前のバージョンのRobotiumでは一貫性のない障害処理が行われていました(たとえば、clickOnViewメソッドがSecurityExceptionsを飲み込んでしまいます)。

前の回答とは異なり、Espressoは、多数のユーザーがいるすべてのAPIバージョンでサポートされています( http://developer.Android.com/about/dashboards/index.html を参照)。古いバージョンの一部で動作しますが、それらのテストはリソースの無駄になります。テストについて話す... Espressoは、すべての変更について、包括的なテストスイート(95%以上のカバレッジ)と、Googleが開発した大半のAndroidアプリケーションによってテストされます。

174
ValeraZakharov

EspressoはRobotiumよりもはるかに高速ですが、一部のSDKバージョンでのみ機能します。

すべてのデバイスで動作するテストが必要な場合は、Roboitumをお試しください。そうでない場合は、エスプレッソに行き、あなたがまだしばらくの間ベータテスターに​​なることを忘れないでください。

8
Snicolas