1. ホーム
  2. android

[解決済み] Google Espresso または Robotium [終了しました]。

2022-09-03 18:05:56

質問

私は自動化されたUIテストツールを使用する必要があり、RobotiumとGoogle Espressoのどちらを使用するか迷っています。

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

どのように解決するのですか?

全文公開:私はEspressoの著者の一人です。

Espresso と Robotium はどちらもインスツルメンテーションベースのフレームワークです。 Android インストルメンテーション を使用して、テスト中のアクティビティを検査し、対話します。

Google では、純正のインストルメンテーションよりも便利だったため、Robotium を使用して開始しました(Robotium の開発者に敬意を表します)。しかし、Robotium では、テスト中のアクティビティと対話できるようにするフレームワークに対する私たちのニーズを満たすことはできませんでした。 信頼性の高い テスト 簡単 を開発者に提供します。

EspressoのRobotiumに対する主な進歩。

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

  2. API。Espressoは小さく、よく定義され、予測可能なAPIを持っており、カスタマイズにも開放されています。フレームワークに、UI要素を見つける方法を伝えるには、標準的な ハムクレストマッチャー を使って UI 要素の位置を特定し、アクションを実行するか、ターゲット要素でアサーションをチェックするように指示します。これは、テスト作成者が30以上のクリックメソッドから選択することを期待されるRobotiumのAPIと対照的です。さらに、Robotium は getCurrentActivity (電流の意味は?) や getView のような危険なメソッドを公開しており、メインスレッドの外のオブジェクトで操作することができます (上記のポイントを参照してください)。

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

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