Activity
の2つの異なるクラスをテストしようとしています。 SharedPreferences
からユーザートークンが非nullの場合IntroActivityTest
でユニットテスト中にgetActivity()メソッドが無期限にブロックされます
public class RootActivityTest extends ActivityInstrumentationTestCase2<RootActivity> {
RootActivity activity;
public RootActivityTest() {
super(RootActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
activity = getActivity();
}
public void testInitialTab() {
assertTrue(activity.getSupportActionBar().getSelectedTab().getText().toString().equalsIgnoreCase("Library"));
}
}
、それはすぐに開始:ここに私のコードは、その後、私はこの問題を説明します:RootActivityTest
IntroActivityTest
public class IntroActivityTest extends ActivityInstrumentationTestCase2<IntroActivity> {
IntroActivity activity;
public IntroActivityTest() {
super(IntroActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
activity = getActivity();
}
public void testIntroBypass() {
if (new SharedPreferencesHelper(getInstrumentation().getTargetContext()).retrieveUserToken() == null) {
assertTrue(!activity.isFinishing());
}
else {
assertTrue(activity.isFinishing());
}
}
}
RootActivity
。 nullの場合は、IntroActivity
のままです。問題は、それがnullでない場合、1番目のテスト(IntroActivityTest
)が成功し、RootActivityTest
のgetActivity()
メソッド呼び出しでハングし、テストでは例外が発生せず、その行にハングするだけです。ユーザートークンがNULLの場合、両方のテストが完全に正常に実行されます。
この原因は何ですか?観測からは、RootActivityTest
がIntroActivity
から開始されたRootActivity
を使用しようとしていますが、RootActivity
のインスタンスを開始してはいけませんか? ActivityInstrumentationTestCase2 APIによれば
すばらしい答え!私の場合、私の新しいActivityは 'onCreate()'で始まっていたので、私は 'getActivity()'と呼ばれる前にモニタを設定する必要がありました。 –