2015-11-18 24 views
5

私のアプリケーションでは、ユーザーが[Register]ボタンをクリックするとRegisterActivityが起動します。ユーザーがフォームに記入すると、詳細がWebサービスに送信され、登録が成功すると、RegisterActivityはRESULT_OKとなります。これは、以下のサンプルコードで要約される:エスプレッソ:結果がRESULT_OKの結果で終了したことをテストするには

エスプレッソを使用して
public void submitRegistration() { 

    showProgressDialog(R.string.registration, R.string.please_wait); 

    getWebApi().register(buildRegistrationFromUI(), new Callback<ApiResponse>() { 
     @Override 
     public void success(ApiResponse apiResponse, Response response) { 

      hideProgressDialog(); 

      setResult(RESULT_OK); 
      finish(); 
     } 

     @Override 
     public void failure(RetrofitError error) { 

      hideProgressDialog(); 
      showErrorDialog(ApiError.parse(error)); 
     } 
    }); 
} 

は、どのように私は活動がsetResult(RESULT_OK)を終えていることを確認することができます。

お願い:私はではない模擬意図を作成したい、私は結果の状態を確認したい。

+0

[これはすでに回答済みです](https://stackoverflow.com/questions/5569830/get-result-from-an-activity-after-finish-in-an-android-unit-test)、リフレクションを使用してアクティビティから値を取得します。 –

答えて

8

すべてsetResult(...)メソッドは、Activityクラス内のフィールドの値を変更することがあるん

public final void setResult(int resultCode, Intent data) { 
    synchronized (this) { 
     mResultCode = resultCode; 
     mResultData = data; 
    } 
} 

だから我々は、値が実際に持っているかどうかをテストするためにmResultCodeフィールドにアクセスするためのJavaリフレクションを使用することができますRESULT_OKに設定されています。

@Rule 
public ActivityTestRule<ContactsActivity> mActivityRule = new ActivityTestRule<>(
     ContactsActivity.class); 


@Test 
public void testResultOk() throws NoSuchFieldException, IllegalAccessException { 
    Field f = Activity.class.getDeclaredField("mResultCode"); //NoSuchFieldException 
    f.setAccessible(true); 
    int mResultCode = f.getInt(mActivityRule.getActivity()); 

    assertTrue("The result code is not ok. ", mResultCode == Activity.RESULT_OK); 
} 
0

質問が正しく理解されているかどうかわかりません。ただし、アクティビティを終了するときに、メインアプリケーションが開いている場合は、アクティビティの結果を確認することができます。アプリケーションコードに結果ステータスを公開する必要があり、ビューマッチャーを記述して、期待されるものと一致するかどうかを確認する必要があります。

2

あなたは、単にActivityTestRuleを使用して、このような活動の結果を得ることができます。

assertThat(rule.getActivityResult(), hasResultCode(Activity.RESULT_OK)); 
assertThat(rule.getActivityResult(), hasResultData(IntentMatchers.hasExtraWithKey(PickActivity.EXTRA_PICKED_NUMBER))); 

here利用できる完全な例を。

関連する問題