Как проверить setResult () в тесте Android Espresso?


Есть ли хороший способ проверить код результата и данные в тесте Android Espresso? Я использую Эспрессо 2.0.

Предположим, что у меня есть Activity вызываемый BarActivity.class, который при выполнении некоторого действия вызывает setResult(int resultCode, Intent data) с соответствующей полезной нагрузкой. Я хотел бы написать тестовый случай, чтобы проверить resultCode и data. Однако, поскольку setResult() является методом final, я не могу его переопределить.

Некоторые варианты, о которых я думал, были:

  • определите новый метод, например setActivityResult(), и просто используйте что так его можно перехватить и т.д...
  • напишите test-only TestActivity, который вызовет startActivityForResult() on BarActivity и проверит результат в TestActivity.onActivityResult()
Пытаюсь решить, какое из двух зол меньше, или есть ли какие-то другие предложения о том, как это проверить. Есть предложения? Спасибо!
2 10

2 ответа:

Если вы хотите перейти на 2.1, то посмотрите на Espresso-Intents:

Используя intending API (кузен Mockito.когда), вы можете предоставить ответ для действий, которые запускаются с помощью startActivityForResult

Это в основном означает, что можно построить и вернуть любой результат, когда запускается конкретное действие (в вашем случае класс BarActivity).

Проверьте этот пример здесь: https://google.github.io/android-testing-support-library/docs/espresso/intents/index.html#intent-stubbing

А также мой ответ на несколько похожий вопрос (но с активностью выбора контактов), в котором я показываю, как построить результат и отправить его обратно в действие, которое называется startActivityForResult()

Если тем временем вы переключились на последний Эспрессо, версия 3.0.1, вы можете просто использовать ActivityTestRule и получить результат активности следующим образом:

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

Вы можете найти рабочий примерздесь .