Issue
Is there any good way to test the result code and data in an Android Espresso test? I am using Espresso 2.0.
Suppose I have an Activity
called BarActivity.class
, which upon performing some action, calls setResult(int resultCode, Intent data)
with the appropriate payload.
I'd like to write a test case to verify the resultCode
and data
. However, because setResult()
is a final
method, I can't override it.
Some options I thought about were:
- Define a new method like
setActivityResult()
and just use that so it can be intercepted, etc... - Write a test-only TestActivity that will call
startActivityForResult()
onBarActivity
and check the result inTestActivity.onActivityResult()
Trying to think what's lesser of the two evils, or if there's any other suggestions on how to test for this. Any suggestions? Thanks!
Solution
If you are willing to upgrade to 2.1, then take a look at Espresso-Intents:
Using the intending API (cousin of Mockito.when), you can provide a response for activities that are launched with startActivityForResult
This basically means it is possible to build and return any result when a specific activity is launched (in your case the BarActivity class).
Check this example here: https://google.github.io/android-testing-support-library/docs/espresso/intents/index.html#intent-stubbing
And also my answer on a somewhat similar issue (but with the contact picker activity), in which I show how to build a result and send it back to the Activity which called startActivityForResult()
Answered By - appoll
Answer Checked By - Cary Denson (JavaFixing Admin)