Tôi đang thử nghiệm hai lớp Activity
khác nhau, trong đó một lớp Activity
xảy ra để gọi cho người kia. Dưới đây là mã của tôi và sau đó tôi sẽ giải thích vấn đề:phương thức getActivity() chặn vô thời hạn trong khi kiểm thử đơn vị
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());
}
}
}
RootActivityTest:
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"));
}
}
Trong IntroActivityTest
, nếu token của user từ SharedPreferences
là phi null, nó ngay lập tức bắt đầu RootActivity
. Nếu nó là null, nó nằm trên IntroActivity
. Vấn đề là nếu nó không phải là null, kiểm tra đầu tiên (IntroActivityTest
) qua, và sau đó nó treo trên các cuộc gọi phương thức getActivity()
trong RootActivityTest
và kiểm tra chỉ đóng băng ... không có trường hợp ngoại lệ, nó chỉ treo trên dòng đó. Nếu mã thông báo người dùng là null, nó sẽ chạy cả hai kiểm tra hoàn toàn tốt.
Điều gì có thể gây ra điều này? Từ quan sát, có vẻ như RootActivityTest
đang cố gắng sử dụng RootActivity
đã được bắt đầu từ IntroActivity
, nhưng không nên bắt đầu phiên bản riêng của mình là RootActivity
?
Câu trả lời hay! Trong trường hợp của tôi, tôi cần thiết lập màn hình của mình _before_ tôi gọi là 'getActivity() 'vì' Activity' mới của tôi đã bắt đầu trong 'onCreate()'. –