特定のアクションが実行されると、現在テスト中のAcitivtyが終了したと断言します。残念ながら、これまでのところ、テストの最後にスリープを追加することでそれをアサートするだけです。もっと良い方法はありますか?
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());
}
}
}
私の場合、isFinishing()
をテストできます:
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()
のもう1つの利点は、バージョンチェックが必要ないことです。
少し遅いかもしれませんが、これも可能です:
assertThat(activityRule.getActivityResult(), hasResultCode(Activity.RESULT_CANCELED));
その良い習慣かどうかはわかりませんが、これは私のために働いた:
assertTrue(mTestRule.getActivity() == null);
以下の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
詳細はこちらをご覧ください: http://developer.Android.com/training/basics/intents/result.html and and there Androidで `startActivityForResult`を管理する方法? SecondActivityから取得したいデータを送信する方法もあります。