4

ネットワーク接続が自然に切断されたときにアプリが正しく動作することを確認する、エミュレーターで実行する自動テストを作成したいと考えています。そのために、次のようなテストを書きたいと思います。

  1. ネットワーク接続を有効にします。
  2. 長いファイルのダウンロードなど、アプリのネットワーク操作を開始します。
  3. ネットワーク接続を無効にします。
  4. ネットワーク接続が失われたというダイアログが表示されることを確認します。

コマンドラインを介してホストPCからネットワーク接続を手動で無効にすることを提案することで、これに対処するさまざまなstackoverflowの回答を見てきました。エミュレーターはホスト PC にアクセスできないため、エミュレーターで実行されているテストによってこれを自動化することはできません。また、ホスト PC シェル スクリプトでコマンドを実行すると、エミュレータ テストとの自動同期を試みるのは非常に困難です。

または、エミュレーターのネットワーク設定を操作することを提案する回答を見てきましたが、これは明らかに実際にはアクセスを無効にせずnetworkInfo.isConnected()、切断状態を報告するなどの明示的な接続チェックのみを引き起こします。それらは依然として双方向通信を可能にします。(たとえば、エミュレーターのネットワーク アクセスが無効になっていても、ブラウザーは完全に機能します。)

エミュレーターで実行し、実際にテスト中に必要に応じてネットワーク アクセスをオン/オフする自動テストを構築できた人はいますか?

4

2 に答える 2

3

現在、単体テスト内からプログラムによってネットワーク アクセスを完全に無効にする方法はありません。この問題について改善要求を提出しました。

于 2012-08-31T13:28:57.263 に答える
1

文書化されていないメソッドを呼び出すことに抵抗がない場合は、次のようにしてデータ接続をオフ/オンにすることができます。

public void enableData(Context context, boolean enable) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    try {
        Method m = cm.getClass().getDeclaredMethod("setMobileDataEnabled", boolean.class);
        m.invoke(cm, enable);
    } catch (Exception e) {
    }
}   
于 2012-08-17T14:23:25.147 に答える