I want to assert that my Acitivty that I am currently testing is finished when certain actions are performed. Unfortunately so far I am only to assert it by adding some sleep at the end of the test. Is there a better way ?
import android.content.Context; import android.os.Build; import android.support.test.rule.ActivityTestRule; import android.test.suitebuilder.annotation.LargeTest; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import static org.junit.Assert.assertTrue; @SuppressWarnings("unchecked") @RunWith(JUnit4.class) @LargeTest public class MyActivityTest { Context context; @Rule public ActivityTestRule<MyActivity> activityRule = new ActivityTestRule(MyActivity.class, true, false); @Before public void setup() { super.setup(); // ... } @Test public void finishAfterSomethingIsPerformed() throws Exception { activityRule.launchActivity(MyActivity.createIntent(context)); doSomeTesting(); activityRule.getActivity().runOnUiThread(new Runnable() { @Override public void run() { fireEventThatResultsInTheActivityToFinishItself(); } }); Thread.sleep(2000); // this is needed :( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { assertTrue(activityRule.getActivity().isDestroyed()); } } }
To test an activity, you use the ActivityTestRule class provided by the Android Testing Support Library. This rule provides functional testing of a single activity. The activity under test will be launched before each test annotated with @Test and before any method annotated with @Before.
One simple way to check for a View or its subclass like a Button is to use method getVisibility from View class. I must caution that visibility attribute is not clearly defined in the GUI world. A view may be considered visible but may be overlapped with another view, for one example, making it hidden.
In my case I can test for isFinishing()
:
assertTrue(activityTestRule.getActivity().isFinishing());
instead of:
Thread.sleep(2000); // this is needed :( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { assertTrue(activityRule.getActivity().isDestroyed()); }
Another advantage of isFinishing()
is, that you do not need the Version check.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With