51

次のすべてのメソッドコードをテストするにはどうすればよいですか?自分のコードがアクティビティの保存/復元プロセスで機能するかどうかを確認するために、すべてのシナリオが発生しているときにシナリオを再生したいと思います。では、すべてのメソッドをテストするには、エミュレーターで何をすべきでしょうか?

public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();

     protected void onRestoreInstanceState(Bundle savedInstanceState);

     protected void onSaveInstanceState(Bundle savedInstanceState);

     protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy();
 }
4

5 に答える 5

169

デバイスで開発者向けオプションを有効にしている場合は、テストに役立つアクティビティを保持しないonRestoreInstanceState()というオプションがあります。

Android設定パネル

于 2013-10-27T19:48:17.323 に答える
18

長期間の非アクティブ状態の後にアプリを再起動するとクラッシュするという問題がありました。「アクティビティを保持しない」では問題が再現されていないことがわかりましたがBackground process settings :: No background processes、開発設定では(デバッグ中であっても)再現されていました。

于 2014-11-20T22:49:08.843 に答える
8

onSaveInstanceStateとonRestoreInstanceStateをテストするには、SetAlwaysFinishツール(以下のリンクを参照)またはエミュレーターに含まれているDevToolsアプリのいずれかを使用できます。

http://bricolsoftconsulting.com/how-to-test-onsaveinstancestate-and-onrestoreinstancestate-on-a-real-device/

これらのアプリはどちらも、ActivityManagerNativeクラスの一部であるAlwaysFinishと呼ばれる非表示の設定を使用して、AndroidOSの動作を変更します。新しい動作では、OSは画面を離れるとすぐにアクティビティをアンロードし、onSaveInstanceStateイベントをトリガーします。OSがアクティビティを元に戻したい場合は、onRestoreInstanceStateイベントを呼び出します。

上記のリンクは、SetAlwaysFinishアプリを使用して、アプリのonSaveInstanceStateイベントとonRestoreInstanceStateイベントをテストする方法を説明しています。DevToolsを使用する場合は、[開発設定]>[アクティビティをすぐに破棄する]を有効にします。

于 2011-12-24T00:27:28.027 に答える
4

これらのイベントをテストする別の方法があります。まず、テストする特定のアクティビティに移動し、次にホームボタンを押してAndroidデバイスモニターに移動する必要があります。

Androidデバイスのモニターの場所

Androidデバイスモニターの例

このツールでは、アプリケーションのスレッドを選択し、停止ボタンでそれを強制終了できます。最後に、履歴からアプリを開く必要があります。そうすれば、スレッドが再作成されます。

于 2017-12-27T17:17:06.537 に答える
4

Androidが提供するテストツールは、アクティビティをある状態から別の状態に駆動したり、アクティビティを再作成して保存と復元のフローをテストしたりできるテストを作成する手段を提供するようになりました。機能のリストについては、Androidデベロッパーのドキュメントページでアプリのアクティビティをテストするをご覧ください。そのページから抜粋した構文の例は次のとおりです。

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
        val scenario = launchActivity<MyActivity>()
        scenario.moveToState(State.CREATED)
    }
}
于 2020-08-18T09:41:08.033 に答える