Espresso如何testingActivity是否完成?

我想断言,当前正在testing的Acitivty在执行某些操作时已完成。 不幸的是,到目前为止,我只是通过在testing结束后添加一些睡眠来断言。 有没有更好的办法 ?

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()); } } } 

Solutions Collecting From Web of "Espresso如何testingActivity是否完成?"

在我的情况下,我可以testingisFinishing()

assertTrue(activityTestRule.getActivity().isFinishing());

代替:

  Thread.sleep(2000); // this is needed :( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { assertTrue(activityRule.getActivity().isDestroyed()); } 

isFinishing()另一个优点是,你不需要版本检查。

您可以使用下面的StartActivityForResult示例,更多链接描述。

如何从FirstActivity开始活动:

 Intent i = new Intent(this, SecondActivity.class); startActivityForResult(i, 1); 

这就是如何完成你的SecondActivity回到第一(没有发送结果):

 Intent returnIntent = new Intent(); setResult(Activity.RESULT_CANCELED, returnIntent); finish(); 

如何在SecondActivity完成时引发事件(在FirstActivity中写入):

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { } }//onActivityResult 

更多你可以在这里find: http : //developer.android.com/training/basics/intents/result.html那里如何在Android上pipe理`startActivityForResult`? 还有如何发送你想从SecondActivity获得的数据。

不知道这是一个很好的做法,但这对我有效:

 assertTrue(mTestRule.getActivity() == null);