Intereting Posts
Фрагмент addToBackStack () и popBackStackImmediate () не работают Как получить разрешение экрана устройства Android с использованием LIBGDX? Прослушивание ключевых слов во все времена, например «Ok google» на 4.4 «Элемент, который вы пытались купить, не найден». Биллинг для Android в приложении Что я должен установить для compileSdkVersion, minSdkVersion и targetSdkVersion? Библиотека Пикассо перестала работать сегодня с графическими ссылками на facebook Почему Android CollapsingToolbarLayout + NestedScrollView не прокручивается до конца, когда отображается мягкая клавиатура Android 6.0.1 не смог включить программную точку Wi-Fi Измерение скорости загрузки с помощью Java / Android Android удаляет кнопки Fastforward и rewind из медиаплеера Храните, конвертируйте в видео поток экрана Android Почему загрузка процессора Android Emulator (qemu-system-i386) настолько высока (% 360)? Декодирование реального потока RTSP: большое видеозапись с использованием MediaPlayer на Android Разные размеры вкладок в Android Как превратить базу данных MSSQL в базу данных SQLite для Android

Тестирование onActivityResult ()

У меня есть следующее действие:

package codeguru.startactivityforresult; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class StartActivityForResult extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.startButton = (Button) this.findViewById(R.id.start_button); this.startButton.setOnClickListener(onStart); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { int result = data.getIntExtra(StartActivityForResult.this.getString(R.string.result), -1); String msg = "requestCode=" + requestCode + ", resultCode=" + resultCode + ", result=" + result; Toast.makeText(this, msg, Toast.LENGTH_LONG).show(); } private View.OnClickListener onStart = new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(StartActivityForResult.this, ChildActivity.class); StartActivityForResult.this.startActivityForResult(intent, R.id.child_request); } }; private Button startButton = null; } 

И следующий тест JUnit:

 package codeguru.startactivityforresult; import android.app.Activity; import android.app.Instrumentation; import android.test.ActivityInstrumentationTestCase2; import android.test.UiThreadTest; import android.widget.Button; import junit.framework.Assert; public class StartActivityForResultTest extends ActivityInstrumentationTestCase2<StartActivityForResult> { public StartActivityForResultTest() { super(StartActivityForResult.class); } @Override public void setUp() throws Exception { super.setUp(); this.setActivityInitialTouchMode(false); this.activity = this.getActivity(); this.startButton = (Button) this.activity.findViewById(R.id.start_button); } @Override public void tearDown() throws Exception { this.activity.finish(); super.tearDown(); } @UiThreadTest public void testStartButtonOnClick() { Assert.assertTrue(this.startButton.performClick()); Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, null); Assert.assertNotNull(result); Instrumentation.ActivityMonitor am = new Instrumentation.ActivityMonitor(ChildActivity.class.getName(), result, true); Assert.assertNotNull(am); Activity childActivity = this.getInstrumentation().waitForMonitorWithTimeout(am, TIME_OUT); Assert.assertNotNull(childActivity); Assert.fail("How do I check that StartActivityForResult correctly handles the returned result?"); } private Activity activity = null; private Button startButton = null; private static final int TIME_OUT = 5 * 1000; // 5 seconds } 

Как вы можете видеть, я понял, как макет результата с помощью Instrumentation.ActivityResult и Instrumentation.ActivityMonitor . Как я могу проверить, что StartActivityForResult.onActivityResult() правильно обрабатывает этот результат?

Solutions Collecting From Web of "Тестирование onActivityResult ()"

Для тестирования onActivityResult () в вашем тестовом классе все, что вам нужно сделать, это:

  1. Создайте ActivityMonitor, который захватывает создание ChildActivity и перенастраивает макет ActivityResult.
  2. Имитация нажатия кнопки, которая запустит ChildActivity для результата.
  3. Сделайте некоторое утверждение о статусе и макет ActivityResult.

Образец StartActivityForResult:

 public class StartActivityForResult extends Activity { private boolean activityResultIsReturned = false; private String activityResult = null; ... ... @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { activityResultIsReturned = true; activityResult = data.getStringExtra("result"); ... ... } ... ... } 

Пример StartActivityForResultTest:

 public class StartActivityForResultTest extends ActivityInstrumentationTestCase2<StartActivityForResult> { ... ... public void testOnActivityResult() { // Get current Activity and check initial status: StartActivityForResult myActivity = getActivity(); assertFalse(myActivity.getActivityResultIsReturned()); assertNull(myActivity.getActiityResult()); // Mock up an ActivityResult: Intent returnIntent = new Intent(); returnIntent.putExtra("result", "This is the result"); Instrumentation.ActivityResult activityResult = new Instrumentation.ActivityResult(Activity.RESULT_OK, returnIntent); // Create an ActivityMonitor that catch ChildActivity and return mock ActivityResult: Instrumentation.ActivityMonitor activityMonitor = getInstrumentation().addMonitor(ChildActivity.class.getName(), activityResult , true); // Simulate a button click that start ChildActivity for result: final Button button = (Button) myActivity.findViewById(com.company.R.id.open_next_activity); myActivity.runOnUiThread(new Runnable() { @Override public void run() { // click button and open next activity. button.performClick(); } }); // Wait for the ActivityMonitor to be hit, Instrumentation will then return the mock ActivityResult: ChildActivity childActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5); // How do I check that StartActivityForResult correctly handles the returned result? assertTrue(myActivity.getActivityResultIsReturned()); assertEqual(myActivity.getActiityResult(), "This is the result"); } ... ... }