Как проверить setResult () в тесте Android Espresso?
Есть ли хороший способ проверить код результата и данные в тесте Android Espresso? Я использую Эспрессо 2.0.
Предположим, что у меня естьActivity
вызываемый BarActivity.class
, который при выполнении некоторого действия вызывает setResult(int resultCode, Intent data)
с соответствующей полезной нагрузкой.
Я хотел бы написать тестовый случай, чтобы проверить resultCode
и data
. Однако, поскольку setResult()
является методом final
, я не могу его переопределить.
Некоторые варианты, о которых я думал, были:
- определите новый метод, например
setActivityResult()
, и просто используйте что так его можно перехватить и т.д... - напишите test-only TestActivity, который вызовет
startActivityForResult()
onBarActivity
и проверит результат вTestActivity.onActivityResult()
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)));
Вы можете найти рабочий примерздесь .